c++11相关内容

与类类型之间的隐式转换

我正在研究 C++ 中的转换构造函数和转换运算符.到目前为止,我学到的是,任何只接受一个参数(以及任意数量的可选默认参数)的非显式构造函数都表示隐式类类型转换为 THAT 类类型,例如,如果一个类定义了一个具有int 类型的一个参数我可以在需要该类类型的对象的任何地方使用 int: (假设 class_type 有一个重载的 += 运算符) class_type a;a+=5; 在这种情 ..
发布时间:2022-01-13 08:23:13 C/C++开发

将 int 重新解释为 float 的最有效的标准兼容方式

假设我保证 float 是 IEEE 754 binary32.给定一个对应于有效浮点数的位模式,存储在 std::uint32_t 中,如何以最有效的标准兼容方式将其重新解释为 float?p> float reinterpret_as_float(std::uint32_t ui) {return/* 对 ui 应用魔法 */;} 我有几种方法我知道/怀疑/假设有一些问题: 通过 r ..

reinterpret_cast 从对象到第一个成员

我正在查看此 answer,我想知道是否使用 reinterpret_cast 将对象投射到其第一个成员并使用结果在 C++ 中可能是安全的. 假设我们有一个类 A、一个类 B 和一个 B 的实例 b: A 类{上市:诠释我;无效 foo(){}};B类{上市:一个;};乙乙; 问题 1:这样使用 ba 是否安全:reinterpret_cast(&b)->foo()? 注 ..

为什么从字符串常量到'char *'的转换在C中有效但在C++中无效

C++11 标准 (ISO/IEC 14882:2011) 在 § C.1.1 中说: char* p = "abc";//在 C 中有效,在 C++ 中无效 对于 C++ 来说,这是可以的,因为指向字符串文字的指针是有害的,因为任何修改它的尝试都会导致崩溃.但为什么它在 C 中有效? C++11 还说: char* p = (char*)"abc";//OK: 添加演员表 这意味着 ..
发布时间:2022-01-12 20:00:49 C/C++开发

创建临时文件时 std::function 内存访问错误

我目前正在实现一些抽象来表示 3D 对象的水平集操作.基本上是在 this GLSL 着色器的惊人页面中描述的内容. 为了简要概述,可以通过将 R^3 域映射到称为水平集(或有符号距离函数)的标量的函数来描述 3D 对象.例如,对于一个球体,水平集函数由 phi(X) = X.Norm2() - R*R 定义,其中 Norm2 表示平方欧几里得范数R^3 中的向量. 于是我想出了一个代 ..
发布时间:2022-01-12 16:23:08 C/C++开发

是否允许主线程在进入 main() 之前生成 POSIX 线程?

我有一个包含线程的对象.我希望对象的命运和线程的命运是一回事.因此构造函数创建一个线程(使用pthread_create),析构函数执行操作以使线程在合理的时间内返回,然后加入线程.只要我不使用静态存储持续时间实例化这些对象之一,它就可以正常工作.如果我在全局或命名空间或静态类范围内实例化这些对象之一,则程序编译良好(gcc 4.8.1)但在运行时立即出现段错误.使用打印语句,我确定主线程在段错误 ..
发布时间:2022-01-12 15:55:17 C/C++开发

如何使用 PostThreadMessage 使用 shared_ptr?

我想升级我的 MFC 生产代码以在调用其他窗口或线程时使用 std::shared_ptr 智能指针.此类调用是 SendMessage、PostMessage 和 PostThreadMessage,它们通过 wparam 和 lparam 并且分别是 unsigned int 和 long.目前,我创建一个类对象,新建一个对象,调用传递一个指向该对象的指针,在接收端使用该对象,然后将其删除. ..
发布时间:2022-01-12 14:35:25 C/C++开发

C++11 可变参数 Printf 性能

可变参数模板是在 c++11 中引入的.我发现 printf 函数可以用它来替换.但是,在实现中使用了 cout.我想知道是否可以使用其他东西来实现类型安全但又不会牺牲太多性能. void safe_printf(const char *s){而 (*s) {if (*s == '%') {if (*(s + 1) == '%') {++s;}别的 {抛出“无效的格式字符串:缺少参数";}}st ..
发布时间:2022-01-12 09:18:06 C/C++开发

C++11 在 Visual Studio 2017 中可用吗?

我目前正在使用 Visual Studio Community 2017.通过查看项目属性中的 C++ 语言标准,它们仅提供 C++14 和 C++17.由于我的代码是使用 C++11 编译器完成的先前分配的代码,因此我无法使用诸如 stoi 之类的函数运行我的代码.我的问题是是否有办法将 C++11 添加到 C++ 的语言标准中? 我正在为 GUI 创建一个 DLL,我的初始化是: #i ..
发布时间:2022-01-12 08:03:25 C/C++开发

检查 C++0x 算法添加的可用性

我正在尝试找出给定实现支持对算法头的哪些添加(gcc 和 MSVC 就足够了). 最简单的方法是使用与核心功能相同的方法:检查编译器版本并在支持语言功能时定义宏.不幸的是,我找不到显示任一编译器版本号的列表. 只是检查通用 C++0x 宏(GXX_EXPERIMENTAL 或 __cplusplus)就足够了,还是我应该检查编译器的更改列表并根据这些列表构建我的宏? http:/ ..
发布时间:2022-01-11 20:11:24 C/C++开发

如何提取 __VA_ARGS__?

我有一个宏来为每个参数调用静态函数. 例如: #define FOO(X) X::do();#define FOO_1(X,Y) X::do();Y::do(); 我的问题是我需要使用带有可变数量参数的 foo,是否可以使用 __VA_ARGS__ ? 如下一行: #define FOO(...) __VA_ARGS__::do() ? 谢谢 解决方案 宏扩展不像使用可 ..
发布时间:2022-01-11 20:11:13 C/C++开发

如何创建一个多次使用一个值而不复制它的宏?

我想创建一个宏,将一对解包成两个局部变量.如果它只是一个变量,我不想创建该对的副本,这将完成: #define UNPACK_PAIR(V1, V2, PAIR) \汽车&V1 = PAIR.first;\汽车&V2 = PAIR.秒;UNPACK_PAIR(一,二,x); 但是,我也希望它不计算多次给出的表达式,例如这应该只调用一次 expensive_computation(): UNP ..
发布时间:2022-01-11 20:10:57 C/C++开发

C++ 宏 '##' 在 '->' 之后不起作用操作员

我有一个shared_ptr对象x,它有如下get和set方法: x->a_value();x->set_a_value();x->b_value();x->set_b_value(); 当我尝试定义宏时: #define MAC(类型) \x->set_##type##_value(val);MAC(一) 它工作正常,但是当我这样做时: #define MAC(类型) \x->##ty ..
发布时间:2022-01-11 20:04:47 C/C++开发

在 static_assert() 编译时显示整数

这是我正在尝试做的简化版本 枚举优先{一个,乙,C,nbElementFirstEnum,};枚举秒{一个,乙,C,nbElementSecondEnum,};静态断言(第一::nbElementFirstEnum == 第二::nbElementSecondEnum,“枚举中的元素数量不同.");/*静态断言(第一::nbElementFirstEnum == 第二::nbElementSec ..
发布时间:2022-01-11 20:03:44 C/C++开发

C++11 中的空宏参数合法吗?

我有时会故意省略宏参数.例如,对于类似函数的宏,如 #define MY_MACRO(A, B, C) ... 我可以这样称呼它: MY_MACRO(, bar, baz) 技术上仍有 3 个参数;只是第一个是“空的".这个问题与可变参数宏无关. 当我这样做时,我在使用 -ansi(又名 -std=c++98)进行编译时收到来自 g++ 的警告,但在我使用 时却没有-std=c++0 ..
发布时间:2022-01-11 20:03:19 C/C++开发

是否可以检测 C++ 中的命名空间成员资格?

对于 C++ 类型, 标头为我们提供了许多有用的编译时反射功能.例如.std::is_base_of::value 在编译时确定 B 是否是 D 的基类. 我想知道是否可以按照类似的方式检测命名空间成员资格?例如.给定一个类型为 T 的命名空间 N,有没有办法确定 T 是否包含在 N 中IS_NAMESPACE_MEMBER_OF(T,N) 形式的宏表达 ..
发布时间:2022-01-11 19:55:13 C/C++开发