c++11相关内容
任何人知道为什么 __ cplusplus 在我的Visual Studio中定义为 199711L (这是“旧的”C ++) 2012 c ++项目?是否应该说 201103L ,因为VS 2012现在有C ++ 11支持?即使我包括C ++ 11头,它仍然是错误定义。任何线索? 解决方案 这已提交给Microsoft审查: 预定义宏的值__cplusplus仍然是199711L
..
我知道在以下情况下,编译器可以自由移动 - 从 makeA (但是也可以免费复制或移动) : struct A { A(A&); A(A&&); }; makeA() { A localA; return localA; } 我不知道是否允许编译器构造一个类型如果在return语句中构造,通过右值引用从 B 类型的本地对象返回一个。换句话说,
..
我现在的经验是,Eclipse的错误发现是没有任何解决方案可怕的buggish尝试 __ GXX_EXPERIMENTAL_CXX0X __ , -std = c ++ 0x , -std = c ++ 11 )。我在这一点,我不想搜索一个解决方案不再。现在我只想看到真正的编译器错误。但是如何实现这一点呢? 解决方案 更新:答案已经过时了。我今天(2014年3月15日)仔细检查:在Ecli
..
我写了这个C ++ 11 trait模板来检查类型是否完整: template using void_t = void; template struct is_complete:std :: false_type {}; template st
..
C ++ 11允许使用 constexpr 说明符声明的函数在常量表达式(如模板参数)中使用。对于允许 constexpr 有严格的要求;基本上这样的函数只封装一个子表达式而不包含其他。 (编辑:这是放宽在C ++ 14,但问题是。) 为什么要求关键字? 获得的是什么? 它有助于揭示接口的意图,但它不会通过保证函数在常量表达式中可用来验证该意图。写入 constexpr 函数后,程序员
..
所以我有一个Random对象: typedef unsigned int uint32; class Random { public: Random()= default; Random(std :: mt19937 :: result_type seed):eng(seed){} private: uint32 DrawNumber std :: mt199
..
在C ++ 03中,不可能通过值返回具有私有非定义复制构造函数的类的对象: struct A {A(int x){...} private:A(A const&); }; A f(){ return A(10); //错误! return 10; //错误了! } 我想知道,这个限制在C ++ 11中解除,可能写入具有类类型返回类型的类的函数没有用于复制或移动
..
我一直在试图围绕C ++ 11中的移动语义如何工作,而且我很难理解移动对象需要满足的条件。查看这里的答案不能真正解决我的问题,因为不能看到如何以明智的方式将它应用于pimpl对象,尽管移动语义是完美的pimpls 。 我的问题的最简单的例子涉及pimpl成语,如下: class Foo { std :: unique_ptr impl_; public:
..
for(auto& entity:memoryManager.getItems())entity-> update(mFrameTime); 如果memoryManager包含1000个项目, memoryManager.getItems() 编译器是否使用-O2(或-O3)运行任何优化? p> ( memoryManager.getItems()返回 st
..
首先阅读Herb's Sutters在C ++ 11中有关pimpl的帖子: GotW#101:编译防火墙,第2部分(难度:8/10) 我在理解GotW#101中提出的解决方案时遇到一些麻烦。据我所知,在GotW#100中艰苦地解决的所有问题都回到了复仇之中: c $ c> pimpl 成员是超出范围的模板,并且定义在使用时不可见(在类窗口小部件 s类定义和隐式生成 widget
..
给定以下代码: struct A {static constexpr int a [3] = {1,2,3} ; }; int main(){ int a = A :: a [0]; int b [A :: a [1]]; } 是 A :: a 必须 odr使用 int a = A :: a [0] ? 注意:此问题表示
..
在某些情况下,需要能够使用 operator(),lambda, mem_fn ),例如在使用Boost适配器与C ++ 11 lambdas 其中需要一个可复制赋值和默认构造类型。 std :: function 将是理想的,但似乎没有办法自动确定什么签名实例化类模板 std :: function 与。有一个简单的方法来获取任意可调用的函数签名和/或将它包装在适当的 std :: fun
..
我是
..
所以我有一些类型 X : typedef .. 。 X; 和模板函数 f : class void f(X& x_out,const T& arg_in); 然后函数 g : void g(const X * x_array,size_t x_array_size); 我需要写一个可
..
我正在努力升级一些C ++代码以利用C ++ 11中的新功能。我有一个trait类与几个函数返回基本类型,这在大多数时候,但不总是,返回一个常量表达式。我想根据函数是否 constexpr 做不同的事情。我想出了以下方法: template struct test { template s
..
我想知道我的同事今天是否std :: vector可以实现使用小缓冲区优化。通过查看C ++ 11草稿,我在23.3.1p8阅读 表达式a.swap(b)和b不是数组的标准容器类型,应交换a和b的值,而不调用对各个容器元素的任何移动,复制或交换操作。 这首先似乎违反了小缓冲区优化,但是在as-if规则下,我们仍然可以做小缓冲区非类类型的优化(因为我们不能观察到拷贝)。下一个文本似乎更难
..
重新使用移动的容器的正确方法是什么? std :: vector
..
我尝试过以下操作: std :: function getAction(std :: unique_ptr&& psomething){ //调用者赋予psomething的所有权 return [psomething](){ psomething-> do_some_thing ; // psomething预计将在此点之后释放 }; }
..
我想要做 模板 void print(ArgTypes ... Args) { print(Args)...; } 并且等价于这个庞大的递归链: 模板 void print(const T& t,ArgTypes ... Args) { p
..
我想在编译时计算字符串文字的长度。为此,我使用以下代码: #include
..