c++11相关内容
(注意:tuple 和 tie 可以取自 Boost 或 C++11.) 在编写只有两个元素的小型结构时,我有时倾向于选择 std::pair,因为所有重要的东西都已经针对该数据类型完成了,例如 operator 用于严格-弱排序. 缺点是几乎没有用的变量名.即使我自己创建了那个 typedef,我也不会记得 2 天后 first 和 second 到底是什么,尤其是如果它们都是同类型.这对于
..
可能重复: 为什么vector::reference不返回对bool的引用? 我曾经认为使用 std::vector::operator[] 我们可以获得访问项目的 deep 副本,但似乎并非总是如此.至少,使用 vector 以下测试代码会给出不同的结果: #include #include 使用命名空间标准;模板
..
这是我想出的一点微优化好奇心: 结构定时器{布尔运行{假};整数滴答声{0};无效 step_versionOne(int mStepSize) {如果(运行)滴答声 += mStepSize;}无效 step_versionTwo(int mStepSize) {滴答声 += mStepSize * static_cast(运行);}}; 这两种方法似乎实际上做同样的事情.第二个版
..
我需要在性能关键路径上生成随机布尔值. 我为此编写的代码是 std::random_device rd;std::uniform_int_distribution随机化器(0, 1);const int val randomizer(std::mt19937(rd()));const bool isDirectionChanged = static_cast(val); 但不要认为这
..
我正在编写一个包含许多其他库中的函数和方法的库.为了避免处理返回值,我正在应用 std::forward ,如下所示: 模板T&&包装器(T&&t){f(t);//t 作为左值传递返回 std::forward(t);} f 返回 void 并采用 T&& (或重载价值).包装器始终返回包装器的参数,并且返回值应保留参数的价值.我真的需要在 return 中使用 std::forward
..
声明是什么 返回{}; 在 C++11 中指明,以及何时使用它来代替(说) 返回NULL; 或 return nullptr; 解决方案 return {};表示“返回一个用空list-initializer".确切的行为取决于返回对象的类型. 来自 cppreference.com (因为 OP 标记为 C++11,我排除了C++14 和 C++17 中的规则;详情请参阅链接
..
这个程序: #include 结构 T {T() {}T(const T &) { std::cout T { 返回 t; })({});std::cout T { return void(), t;
..
我有一个像下面这样的课程: 类 VeryVeryVeryLongTypeName{布尔 is_ok;非常非常非常长类型名称():is_ok(假){}};非常非常非常长类型名称 f(){非常非常长类型名称 v;...//做某事如果(条件_1 为真){返回 v;}别的{返回非常非常非常长类型名称();}...//做某事如果(条件_2 为真){返回 v;}别的{返回非常非常非常长类型名称();}}
..
我已经开始学习 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()
..
在对另一个问题的评论中,Jonathan Wakely 回应了我的声明: 对于局部变量函数返回,您永远不需要显式移动价值.这是隐含的移动 -> ...永远不要说永远...如果局部变量,您需要显式移动与返回类型不同,例如std::unique_ptrf() { auto p = std::make_unique();p->foo();返回 p;},但是如果类型相同,它会尽可
..
我正在研究 Bjarne Stroustrup 的《C++ 编程语言》,但我被困在其中一个示例上.这是代码,除了空格差异和注释之外,我的代码与书中的代码相同(第 51 页). 枚举类 Traffic_light { green, yellow, red};int main(int argc, const char * argv[]){Traffic_light 灯 = Traffic_light
..
我的问题类似于 在使用整数模板参数时可以展开循环吗? 但我想混合编译时间和运行时.具体来说,我在编译时知道一个常量 NBLOCK 并且我想在一个变量 start_block 上编写一个开关,该变量仅在运行时知道 NBLOCK是交换机中的条目数.这是我使用宏得到的结果: #define CASE_UNROLL(i_loop) \案例 i_loop:\dst.blocks[i_loop+1] -=
..
假设我有一些这样的结构: struct MyStruct1 {内联无效 DoSomething() {cout 如您所见,对于所有三个结构,我可以在该结构的一个对象上调用 DoSomething() 并让它工作(尽管每个结构的实现方式不同): MyStruct1 a;MyStruct2 b;MyStruct3 c;a.DoSomething();//有效,调用 Struct1 的实例函数b
..
方案一: #include #include #include 诠释主要(){//编译成功std::vectorvec{1,2,3,4,5};返回 EXIT_SUCCESS;} 方案 2: #include #include #include 诠释主要(){//编译错误std::queue
..
我想用 k 对象初始化一个 std::vector(属于 std::pair),其值对如下所示. 这是我的尝试: //int kstd::vector >v(k, (std::numeric_limits::max(), -1)); 错误: usr/include/c++/4.6/bits/stl_vector.h: 在成员函
..
我阅读了 C++ 入门第 5 版,其中提到了最新的标准支持列表初始化程序. 我的测试代码是这样的: #include #include #include #include 使用标准::cin;使用 std::cout;使用 std::endl;使用标准::字符串;使用标准::向量;使用 std::ispunct;int main(int
..
当我想要一个静态指针作为类的成员时,我需要 constexpr 来使用 nullptr 进行初始化. 类应用程序{私人的:constexpr 静态 Application* app = nullptr;} 谁能解释我为什么需要这样做?我找不到静态变量必须在编译时存在的确切原因. 解决方案 那是因为你在类定义中初始化它.这只允许用于常量整数和枚举类型(总是)和 constexpr 数据成
..
我一直在 Code::Blocks 和 MingW 编译器中使用以下向量初始化值: 向量v0 {1,2,3,4}; 之后,我不得不将代码移至 Visual Studio 项目 (c++) 并尝试构建.我收到以下错误: 局部函数定义是非法的 Visual Studio 编译器不支持这种初始化? 我需要如何更改代码以使其兼容? 我想初始化向量并同时用值填充它,就像一个数组一样.
..
std::array 本质上是包装在 struct 中的 C 样式数组.struct的初始化需要大括号,数组的初始化也需要大括号.所以我需要两对大括号: std::arraya = {{1, 2, 3, 4, 5}}; 但是我看到的大多数示例代码只使用了一对大括号: std::arrayb = {1, 2, 3, 4, 5}; 为什么允许这样做,与第一种方法相比,它有什么好处或缺点?
..
我很好奇为什么可以在构造函数中修改 const 成员. 初始化中是否有任何标准规则可以覆盖成员的“常量"? 结构栏{常量 int b = 5;//默认成员初始化酒吧(int c):b(c){}};酒吧 *b = 新酒吧(2);//问题:Bar::b 修改为 2//期望它是一个错误 有什么想法吗? 解决方案 这不是修改(或赋值),而是 初始化.例如 结构栏{常量 int b =
..