c++11相关内容

通过 'tuple' 和 'tie' 实现比较运算符,好主意吗?

(注意:tuple 和 tie 可以取自 Boost 或 C++11.) 在编写只有两个元素的小型结构时,我有时倾向于选择 std::pair,因为所有重要的东西都已经针对该数据类型完成了,例如 operator 用于严格-弱排序. 缺点是几乎没有用的变量名.即使我自己创建了那个 typedef,我也不会记得 2 天后 first 和 second 到底是什么,尤其是如果它们都是同类型.这对于 ..
发布时间:2022-01-19 23:34:05 C/C++开发

向量<bool>::operator[] 不当行为?

可能重复: 为什么vector::reference不返回对bool的引用? 我曾经认为使用 std::vector::operator[] 我们可以获得访问项目的 deep 副本,但似乎并非总是如此.至少,使用 vector 以下测试代码会给出不同的结果: #include #include 使用命名空间标准;模板 ..
发布时间:2022-01-19 17:44:15 C/C++开发

返回值的转发.需要 std::forward 吗?

我正在编写一个包含许多其他库中的函数和方法的库.为了避免处理返回值,我正在应用 std::forward ,如下所示: 模板T&&包装器(T&&t){f(t);//t 作为左值传递返回 std::forward(t);} f 返回 void 并采用 T&& (或重载价值).包装器始终返回包装器的参数,并且返回值应保留参数的价值.我真的需要在 return 中使用 std::forward ..
发布时间:2022-01-19 15:36:05 C/C++开发

“返回{}"是什么意思?语句在 C++11 中是什么意思?

声明是什么 返回{}; 在 C++11 中指明,以及何时使用它来代替(说) 返回NULL; 或 return nullptr; 解决方案 return {};表示“返回一个用空list-initializer".确切的行为取决于返回对象的类型. 来自 cppreference.com (因为 OP 标记为 C++11,我排除了C++14 和 C++17 中的规则;详情请参阅链接 ..
发布时间:2022-01-19 15:34:07 C/C++开发

如何优雅地返回默认初始化的对象?

我有一个像下面这样的课程: 类 VeryVeryVeryLongTypeName{布尔 is_ok;非常非常非常长类型名称():is_ok(假){}};非常非常非常长类型名称 f(){非常非常长类型名称 v;...//做某事如果(条件_1 为真){返回 v;}别的{返回非常非常非常长类型名称();}...//做某事如果(条件_2 为真){返回 v;}别的{返回非常非常非常长类型名称();}} ..
发布时间:2022-01-19 15:13:53 C/C++开发

为什么 lambda 返回 bool?

我已经开始学习 C++11 和 C++14,我有一个问题.为什么 lambda 不返回 23? 模板自动函数(T t){返回 t;}int main(int argc, char *argv[]){QCoreApplication a(argc, argv);自动 abc = []()->auto { return func(23);};qDebug() ..
发布时间:2022-01-19 15:00:58 C/C++开发

return 语句何时需要显式移动?

在对另一个问题的评论中,Jonathan Wakely 回应了我的声明: 对于局部变量函数返回,您永远不需要显式移动价值.这是隐含的移动 -> ...永远不要说永远...如果局部变量,您需要显式移动与返回类型不同,例如std::unique_ptrf() { auto p = std::make_unique();p->foo();返回 p;},但是如果类型相同,它会尽可 ..
发布时间:2022-01-19 14:43:01 C/C++开发

使用开关展开循环的 C++ 模板?

我的问题类似于 在使用整数模板参数时可以展开循环吗? 但我想混合编译时间和运行时.具体来说,我在编译时知道一个常量 NBLOCK 并且我想在一个变量 start_block 上编写一个开关,该变量仅在运行时知道 NBLOCK是交换机中的条目数.这是我使用宏得到的结果: #define CASE_UNROLL(i_loop) \案例 i_loop:\dst.blocks[i_loop+1] -= ..

静态类成员的初始化.为什么是 constexpr?

当我想要一个静态指针作为类的成员时,我需要 constexpr 来使用 nullptr 进行初始化. 类应用程序{私人的:constexpr 静态 Application* app = nullptr;} 谁能解释我为什么需要这样做?我找不到静态变量必须在编译时存在的确切原因. 解决方案 那是因为你在类定义中初始化它.这只允许用于常量整数和枚举类型(总是)和 constexpr 数据成 ..
发布时间:2022-01-19 00:08:05 C/C++开发

c++向量初始化

我一直在 Code::Blocks 和 MingW 编译器中使用以下向量初始化值: 向量v0 {1,2,3,4}; 之后,我不得不将代码移至 Visual Studio 项目 (c++) 并尝试构建.我收到以下错误: 局部函数定义是非法的 Visual Studio 编译器不支持这种初始化? 我需要如何更改代码以使其兼容? 我想初始化向量并同时用值填充它,就像一个数组一样. ..
发布时间:2022-01-19 00:04:05 C/C++开发

std::array<T>初始化

std::array 本质上是包装在 struct 中的 C 样式数组.struct的初始化需要大括号,数组的初始化也需要大括号.所以我需要两对大括号: std::arraya = {{1, 2, 3, 4, 5}}; 但是我看到的大多数示例代码只使用了一对大括号: std::arrayb = {1, 2, 3, 4, 5}; 为什么允许这样做,与第一种方法相比,它有什么好处或缺点? ..
发布时间:2022-01-19 00:00:58 C/C++开发

为什么可以在构造函数中修改 const 成员?

我很好奇为什么可以在构造函数中修改 const 成员. 初始化中是否有任何标准规则可以覆盖成员的“常量"? 结构栏{常量 int b = 5;//默认成员初始化酒吧(int c):b(c){}};酒吧 *b = 新酒吧(2);//问题:Bar::b 修改为 2//期望它是一个错误 有什么想法吗? 解决方案 这不是修改(或赋值),而是 初始化.例如 结构栏{常量 int b = ..
发布时间:2022-01-18 23:57:40 C/C++开发