草庐IT

0x0000007c

全部标签

c++ - 添加新的 c++0x 右值引用运算符重载时如何减少冗余代码

我正在添加新的运算符重载以利用c++0x右值引用,我觉得我正在生成大量冗余代码。我有一个类tree,它包含一个对double值进行代数运算的树。这是一个示例用例:treex=1.23;treey=8.19;treez=(x+y)/67.31-3.15*y;...std::cout对于每个二元运算(如加号),每一边都可以是左值tree、右值tree或double。这导致每个二元操作有8个重载://corervalueoverloadsforplus:treeoperator+(consttree&a,consttree&b);treeoperator+(consttree&a,tree&

c++ - 添加新的 c++0x 右值引用运算符重载时如何减少冗余代码

我正在添加新的运算符重载以利用c++0x右值引用,我觉得我正在生成大量冗余代码。我有一个类tree,它包含一个对double值进行代数运算的树。这是一个示例用例:treex=1.23;treey=8.19;treez=(x+y)/67.31-3.15*y;...std::cout对于每个二元运算(如加号),每一边都可以是左值tree、右值tree或double。这导致每个二元操作有8个重载://corervalueoverloadsforplus:treeoperator+(consttree&a,consttree&b);treeoperator+(consttree&a,tree&

c++ - 为什么 C++0x 右值引用不是默认值?

即将推出的C++标准C++0x的一个很酷的新特性是“右值引用”。右值引用类似于左值(普通)引用,除了它可以绑定(bind)到临时值(通常,临时只能绑定(bind)到const引用):voidFunctionWithLValueRef(int&a){…}voidFunctionWithRValueRef(int&&a){…}intmain(){FunctionWithLValueRef(5);//error,5isatemporaryFunctionWithRValueRef(5);//okay}那么,他们为什么要发明一种全新的类型,而不是仅仅取消对正常引用的限制以允许它们绑定(bind

c++ - 为什么 C++0x 右值引用不是默认值?

即将推出的C++标准C++0x的一个很酷的新特性是“右值引用”。右值引用类似于左值(普通)引用,除了它可以绑定(bind)到临时值(通常,临时只能绑定(bind)到const引用):voidFunctionWithLValueRef(int&a){…}voidFunctionWithRValueRef(int&&a){…}intmain(){FunctionWithLValueRef(5);//error,5isatemporaryFunctionWithRValueRef(5);//okay}那么,他们为什么要发明一种全新的类型,而不是仅仅取消对正常引用的限制以允许它们绑定(bind

c++ - C++(0x) 中是否存在无操作 "do nothing"函数对象?

我意识到这是一个可笑的问题,因为它需要不到2秒的时间来实现。但我依稀记得读过新标准引入了一个。我对VC10的标题进行了grep处理,但一无所获。你能帮我吗?烦死我了!:)编辑:转念一想,我记得的新仿函数可能是不相关的std::default_deleter。 最佳答案 您总是可以编写一个无操作的lambda:[]{} 关于c++-C++(0x)中是否存在无操作"donothing"函数对象?,我们在StackOverflow上找到一个类似的问题: https:

c++ - C++(0x) 中是否存在无操作 "do nothing"函数对象?

我意识到这是一个可笑的问题,因为它需要不到2秒的时间来实现。但我依稀记得读过新标准引入了一个。我对VC10的标题进行了grep处理,但一无所获。你能帮我吗?烦死我了!:)编辑:转念一想,我记得的新仿函数可能是不相关的std::default_deleter。 最佳答案 您总是可以编写一个无操作的lambda:[]{} 关于c++-C++(0x)中是否存在无操作"donothing"函数对象?,我们在StackOverflow上找到一个类似的问题: https:

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)