草庐IT

0x0000007c

全部标签

c++ - c++0x中wchar_t的命运如何?

考虑到新的字符类型char8_t、char16_t和char32_twchar_t的命运是什么?/?更重要的是,std::wstring、std::wcout等呢?w*系列类(class)是否已弃用?是否有用于新字符类型的新std::ustring和std::Ustring类? 最佳答案 wchar_t没有任何变化,它仍然是特定于实现的(并且与C兼容)。新类型char16_t和char32_t在新标准中定义了语义。旧的wchar_t可能相当于其中之一,但在不同的实现中可能是不同的。或者在某些系统上都没有。对于新字符类型的字符串,您将

c++ - C++0x 中的闭包和嵌套 lambda

使用C++0x,当我在lambda中有一个lambda时,如何捕获一个变量?例如:std::vectorc1;intv=10;c2;std::for_each(c2.begin(),c2.end(),[v](intnum) 最佳答案 std::for_each(c1.begin(),c1.end(),[&](intnum){std::vectorc2;int&v_=v;std::for_each(c2.begin(),c2.end(),[&](intnum){v_=num;});});不是特别干净,但确实有效。

c++ - C++0x 中的闭包和嵌套 lambda

使用C++0x,当我在lambda中有一个lambda时,如何捕获一个变量?例如:std::vectorc1;intv=10;c2;std::for_each(c2.begin(),c2.end(),[v](intnum) 最佳答案 std::for_each(c1.begin(),c1.end(),[&](intnum){std::vectorc2;int&v_=v;std::for_each(c2.begin(),c2.end(),[&](intnum){v_=num;});});不是特别干净,但确实有效。

c++ - i +=++i 在 C++0x 中是未定义的行为吗?

我非常相信我找到的解释是i=++iisnotundefined就C++0x而言,但我无法判断i+=++i的行为是否定义明确。有接盘侠吗? 最佳答案 使i=++i定义良好的推理同样可以用来证明i+=++i也必须是良好的——已定义。i+=++i等价于i+=(i+=1)并且新的排序规则要求赋值发生在i+=1子表达式的值计算之前。这意味着表达式i+=++i的结果必须与i=2*i+1的结果相同。编辑:我必须修改我的答案,因为行为毕竟是未定义的。i+=++i的行为是未定义的,因为子表达式i(左侧参数)和++的值计算i彼此之间是无序的,其中一个包

c++ - i +=++i 在 C++0x 中是未定义的行为吗?

我非常相信我找到的解释是i=++iisnotundefined就C++0x而言,但我无法判断i+=++i的行为是否定义明确。有接盘侠吗? 最佳答案 使i=++i定义良好的推理同样可以用来证明i+=++i也必须是良好的——已定义。i+=++i等价于i+=(i+=1)并且新的排序规则要求赋值发生在i+=1子表达式的值计算之前。这意味着表达式i+=++i的结果必须与i=2*i+1的结果相同。编辑:我必须修改我的答案,因为行为毕竟是未定义的。i+=++i的行为是未定义的,因为子表达式i(左侧参数)和++的值计算i彼此之间是无序的,其中一个包

C++0x 右值引用 - 左值-右值绑定(bind)

这是一个后续问题C++0xrvaluereferencesandtemporaries在上一个问题中,我问过这段代码应该如何工作:voidf(conststd::string&);//lessefficientvoidf(std::string&&);//moreefficientvoidg(constchar*arg){f(arg);}由于隐式临时性,似乎应该调用移动重载,这发生在GCC而不是MSVC(或MSVC的智能感知中使用的EDG前端)。这段代码怎么样?voidf(std::string&&);//NB:Noconststring&overloadsuppliedvoidg1(

C++0x 右值引用 - 左值-右值绑定(bind)

这是一个后续问题C++0xrvaluereferencesandtemporaries在上一个问题中,我问过这段代码应该如何工作:voidf(conststd::string&);//lessefficientvoidf(std::string&&);//moreefficientvoidg(constchar*arg){f(arg);}由于隐式临时性,似乎应该调用移动重载,这发生在GCC而不是MSVC(或MSVC的智能感知中使用的EDG前端)。这段代码怎么样?voidf(std::string&&);//NB:Noconststring&overloadsuppliedvoidg1(

c++ - 比较并交换C++ 0x

从关于C++原子类型和操作的C++0xproposal中:29.1OrderandConsistency[atomics.order]Addanewsub-clausewiththefollowingparagraphs.Theenumerationmemory_orderspecifiesthedetailedregular(non-atomic)memorysynchronizationorderasdefinedin[thenewsectionaddedbyN2334oritsadoptedsuccessor]andmayprovideforoperationordering.I

c++ - 比较并交换C++ 0x

从关于C++原子类型和操作的C++0xproposal中:29.1OrderandConsistency[atomics.order]Addanewsub-clausewiththefollowingparagraphs.Theenumerationmemory_orderspecifiesthedetailedregular(non-atomic)memorysynchronizationorderasdefinedin[thenewsectionaddedbyN2334oritsadoptedsuccessor]andmayprovideforoperationordering.I

c++ - C++0x 中的 Unicode 支持

我正在尝试在C++0x中使用新的unicode字符。所以我写了示例代码:#include#includeintmain(){std::u32stringstr=U"HelloWorld";std::basic_ofstreamfout("output.txt");fout但是在执行这个程序之后,我得到了一个空的output.txt文件。那么为什么它不打印HelloWorld呢?还有像cout和cin已经为这些类型定义的东西,或者stdin和stdout不支持Unicode?编辑:我正在使用g++和Linux。编辑:АТТЕNTION。我发现,标准委员会从C++0x中解散了Unicode