c++11相关内容
我想要可变参数模板参数必须是唯一的。 我知道当多继承时,不允许相同的类继承。 struct A {}; struct B:A,A {}; //错误 使用这条规则,我做了一些代码。 #include 模板 struct id {}; template struct base_all:id
..
当使用 push_back of std :: vector 时,我可以推送向量本身的元素,由于重新分配而使参数无效: std :: vector
..
我正在玩一个技巧来重载C ++中的lambdas。具体来说: // for std :: function #include //对于std :: cout #include template struc
..
为了标准化我的代码并使其更便于移植,我替换了 #ifdef __GNUC__ typedef __attribute __((aligned(16)))float aligned_block [4]; #else typedef __declspec(align(16))float aligned_block [4]; #endif 与 type
..
C ++ 11允许将非静态数据成员声明为“auto”,如果它们在声明中初始化的话?例如: struct S { auto x = 5; //代替'int x = 5;',这是绝对允许的 }; GCC 4.7拒绝上述代码,但接受 int x = 5; 。 假设这不是编译器错误,而是标准真的不允许它,为什么不呢?它将像声明局部变量 auto 一样有用。
..
这就是为什么: struct S {}; struct T { T(S& s):s {s} {} S& s; }; int main() { S s; T t {s}; } 给我一个GCC 4.7的编译器错误: test.cpp:在构造函数'T :: T(S&)': test.cpp:5:18: $ b
..
我最近发现自己在C ++ 11模式下使用gcc 4.5的以下宏: #define RETURN (x)→ decltype(x){return x; } 并编写如下函数: template auto f(T& x)RETURN((g(h(std :: forward(x))))) 我一直这样做,以避免不必要的有效地
..
我有一组非正交的策略,所有这些策略都实现了一个通用命名方法,这些策略添加了安全检查。 我希望用户能够组合策略以允许更复杂的验证,而无需手动为每个组合案例创建策略。 我的方法是创建一个新的策略类来组合其他方法。 下面的简化示例显示了C作为组合类,这里的方法id是组合的。预期的结果是,当在C上调用id时,顺序调用每个基类的id。 #include
..
给定我的变量是一个指针,如果我将它分配给一个“auto”类型的变量,是否指定“*”? std :: vector * getVector(); //返回填充的向量 // ... std :: vector * myvector = getVector(); //假设有n个项目 auto newvar1 = myvector; //
..
在C ++ 11标准( 最近草案is N3337 )section 1.2 规范参考说: 以下引用的文档对于本文档的 应用程序是不可或缺的。对于注日期的引用文件,只有引用的版本 适用。对于未注明日期的引用,最新版本的 引用文件(包括任何修订)适用。 关于如何应用参考。容易的情况是当C ++ 11显式地引用回一个引用,例如在 3.9.1 基本类型中,它说: / p> [...
..
可能重复: 如何在向量增长时执行移动语义? 插入, push_back 和 emplace ( _back )可以导致重新分配 std :: vector 。在重新分配容器时,我发现下面的代码复制 而不是移动,我很困惑。 #include #include struct foo { int value; explic
..
在C ++中,以下是否有未定义的行为: int i = 0; (i + = 10)+ = 10; 在我的回答 在C和C ++中+ =的结果是什么?这里的细微之处是,默认响应似乎是“是”,而正确的答案是“它取决于C ++标准的版本”。 如果它依赖于标准的版本,请解释UB在哪里和不在哪里。 解决方案 tl; dr :(i + = 10)+中执行的修改
..
之间有什么区别: std :: shared_ptr(new int); 和 std :: shared_ptr p = std :: make_shared(); ? 为什么? P。非常确定这一定已经回答了,但我找不到类似的问题。
..
C ++ 11增加了告诉编译器创建默认实施任何特殊成员职能。虽然我可以看到删除一个函数的值,其中的值明确默认一个函数? 我可以看到的唯一一点是,默认构造函数只有在没有其他构造函数存在时才被创建: class eg { public: eg(int i); eg()= default; }; 但是这真的比现在更好吗? class eg { pub
..
使用ref限定的函数重载时,我从 GCC(4.8.1)和 Clang(2.9和trunk)得到不同的结果。考虑下面的代码: #include #include struct foo { int& bar()& { std :: cout
..
智能指针如何处理数组?例如, void function(void) { std :: unique_ptr
..
C ++标准库头文件可能以未指定的方式包含彼此,因此程序员通常不应该依赖于一个头文件包括另一个头文件。然而,在少数情况下,头部被保证包括另一个头部,或者提供否则将需要包括另一个头部的某些功能。 解决方案 这个答案忽略了C头文件 - 和 。在C ++库头文件(所有引用都是N4582)中: 由
..
我有代码: class A { public: A ; private: int i = 1; }; int main(){ const A a; return 0; } 它在g ++上编译良好(参见
..
这个constexpr代码没有编译在Visual Studio 2013版本12.0.21005.1 REL 有没有更新的Visual Studio编译器与constexpr? #include constexpr int factorial(int n) { return n
..
template void for_each_argument(F f,Args& ... args){ [](...){}((f(std :: forward& )...); } 它最近在isocpp.org上推荐,无需解释。 解决方案 简单的答案是“它不太好”。 args ... 中的每一个上的
..