草庐IT

C++0x lambdas 编码风格

我想知道人们如何在编码风格方面使用C++0xlambda。最有趣的问题是在编写捕获列表时要做到多彻底。一方面,该语言允许显式列出捕获的变量,并且通过“显式优于隐式规则”,因此进行详尽的列表以清楚地说明意图是有意义的。例如:intsum;std::for_each(xs.begin(),xs.end(),[&sum](intx){sum+=x});对此的另一个论点是,由于ref-capturedlocals的生命周期不会仅仅因为它们被捕获而改变(因此lambda很容易最终引用一个生命周期早已结束的局部变量),因此使捕获显式有助于减少此类错误并追踪它们。另一方面,该语言还特意提供了一种快捷

C++0x lambdas 编码风格

我想知道人们如何在编码风格方面使用C++0xlambda。最有趣的问题是在编写捕获列表时要做到多彻底。一方面,该语言允许显式列出捕获的变量,并且通过“显式优于隐式规则”,因此进行详尽的列表以清楚地说明意图是有意义的。例如:intsum;std::for_each(xs.begin(),xs.end(),[&sum](intx){sum+=x});对此的另一个论点是,由于ref-capturedlocals的生命周期不会仅仅因为它们被捕获而改变(因此lambda很容易最终引用一个生命周期早已结束的局部变量),因此使捕获显式有助于减少此类错误并追踪它们。另一方面,该语言还特意提供了一种快捷

c++ - 是否有编译时函数/宏来确定 C++0x 结构是否为 POD?

我想要一个C++0xstatic_assert测试给定的结构类型是否为POD(以防止其他程序员无意中与新成员一起破坏它)。即,structA//isaPODtype{intx,y,z;}structB//isnotaPODtype(hasanondefaultctor){intx,y,z;B(int_x,int_y,int_z):x(_x),y(_y),z(_z){}}voidCompileTimeAsserts(){static_assert(is_pod_type(A),"Thisassertshouldnotfire.");static_assert(is_pod_type(B)

c++ - 是否有编译时函数/宏来确定 C++0x 结构是否为 POD?

我想要一个C++0xstatic_assert测试给定的结构类型是否为POD(以防止其他程序员无意中与新成员一起破坏它)。即,structA//isaPODtype{intx,y,z;}structB//isnotaPODtype(hasanondefaultctor){intx,y,z;B(int_x,int_y,int_z):x(_x),y(_y),z(_z){}}voidCompileTimeAsserts(){static_assert(is_pod_type(A),"Thisassertshouldnotfire.");static_assert(is_pod_type(B)

C++0x 内存模型和推测加载/存储

所以我正在阅读有关即将推出的C++0x标准的一部分的内存模型。但是,对于允许编译器执行的一些限制,特别是关于推测性加载和存储的一些限制,我有点困惑。首先,一些相关的东西:HansBoehm'spagesaboutthreadsandthememorymodelinC++0xBoehm,"ThreadsCannotbeImplementedasaLibrary"BoehmandAdve,"FoundationsoftheC++ConcurrencyMemoryModel"Sutter,"Prism:APrinciple-BasedSequentialMemoryModelforMicro

C++0x 内存模型和推测加载/存储

所以我正在阅读有关即将推出的C++0x标准的一部分的内存模型。但是,对于允许编译器执行的一些限制,特别是关于推测性加载和存储的一些限制,我有点困惑。首先,一些相关的东西:HansBoehm'spagesaboutthreadsandthememorymodelinC++0xBoehm,"ThreadsCannotbeImplementedasaLibrary"BoehmandAdve,"FoundationsoftheC++ConcurrencyMemoryModel"Sutter,"Prism:APrinciple-BasedSequentialMemoryModelforMicro

c++ - 继承构造函数是否适用于 C++0x 中的模板?

在C++0x中,您可以使用using关键字来继承构造函数,如下所示:classB{B(int){}};classA:publicB{usingB::B;};这将隐式声明一个A(int)构造函数。这适用于模板吗?classB{B(int){}};templateclassA:publicT{usingT::T;};在T::T中,我希望编译器能够找出左侧的T,因为在模板参数上使用范围运算符是正常的,但要弄清楚右手T是构造函数是一个特例。事实上,它似乎有一个歧义:如果我在B中有一个名为T的方法,我试图在A中添加重载(这就是编译器在C++0x之前解释这种using声明的方式)?

c++ - 继承构造函数是否适用于 C++0x 中的模板?

在C++0x中,您可以使用using关键字来继承构造函数,如下所示:classB{B(int){}};classA:publicB{usingB::B;};这将隐式声明一个A(int)构造函数。这适用于模板吗?classB{B(int){}};templateclassA:publicT{usingT::T;};在T::T中,我希望编译器能够找出左侧的T,因为在模板参数上使用范围运算符是正常的,但要弄清楚右手T是构造函数是一个特例。事实上,它似乎有一个歧义:如果我在B中有一个名为T的方法,我试图在A中添加重载(这就是编译器在C++0x之前解释这种using声明的方式)?

c++ - 我怎样才能让 C++0x 和 __STRICT_ANSI__ 相处融洽?

我需要在项目中使用popen,但我得到:error:'popen'wasnotdeclaredinthisscope看起来GCC在-std=c++0x和(与我能找到的少量信息相反)-std下定义了__STRICT_ANSI__=gnu++0x,这会导致popen(和_popen)从stdio中删除。奇怪的是,取消定义__STRICT_ANSI__并不能解决问题,也不能前向声明函数。我显然错过了一些东西。是否有合理的解决方法?我使用4.5.0的MinGW,并升级到4.5.2,但仍然遇到同样的问题。我宁愿不用msys来编译4.6.0,但如果必须的话,我会这样做。

c++ - 我怎样才能让 C++0x 和 __STRICT_ANSI__ 相处融洽?

我需要在项目中使用popen,但我得到:error:'popen'wasnotdeclaredinthisscope看起来GCC在-std=c++0x和(与我能找到的少量信息相反)-std下定义了__STRICT_ANSI__=gnu++0x,这会导致popen(和_popen)从stdio中删除。奇怪的是,取消定义__STRICT_ANSI__并不能解决问题,也不能前向声明函数。我显然错过了一些东西。是否有合理的解决方法?我使用4.5.0的MinGW,并升级到4.5.2,但仍然遇到同样的问题。我宁愿不用msys来编译4.6.0,但如果必须的话,我会这样做。