草庐IT

c++ - 在 MacOSX Lion 上编译 gcc 4.6.1 C++0x 线程代码时出错

编译以下代码时:#include#includeusingnamespacestd;voidhello(){cout使用:$g++-4.6.1-std=c++0x-pthreadthreading.cpp我收到以下错误:threading.cc:Infunction‘intmain()’:threading.cc:13:2:error:‘thread’wasnotdeclaredinthisscopethreading.cc:13:9:error:expected‘;’before‘t’threading.cc:14:2:error:‘t’wasnotdeclaredinthissco

c++ - std::bind 和作用域后堆栈使用

所以,今天我在运行一些使用AddressSanitizer构建的代码时,偶然发现了一个奇怪的作用域后堆栈使用错误。我有这个简化的例子:#includeclassk{public:operatorint(){return5;}};constint&n(constint&a){returna;}intmain(){kl;returnstd::bind(n,l)();}ASAN提示最后一行代码:==27575==ERROR:AddressSanitizer:stack-use-after-scopeonaddress0x7ffeab375210atpc0x000000400a01bp0x7f

c++ - 将 std::array 与传统数组 C++ 进行比较

我正在尝试对以下元素进行比较:std::vector>_targets={{0x00,0x00,0x00,0x00,0x00,0x11}{0x00,0x00,0x00,0x00,0x00,0x22}};到传统数组:uint8_t_traditional[6]={0x00,0x00,0x00,0x00,0x00,0x33}作为:for(autotarget:_targets){if(!memcmp(target,_traditional,6)){known=1;}}并且收到数据转换错误:error:cannotconvert'std::array'to'constvoid*'forarg

c# - c++0x 概念和 c# 约束有什么区别?

C++0x引入了概念,让您基本上可以定义一种类型。Itspecifiesthepropertiesrequiredofatype.C#允许您使用“where”子句指定泛型的约束。它们之间有语义上的区别吗?谢谢。 最佳答案 要记住的一件事是C++模板和C#泛型并不完全相同。看这个answer有关这些差异的更多详细信息。从您链接到解释C++0x概念的页面来看,听起来您的想法是在C++中您希望能够指定模板类型实现某些属性。在C#中,约束更进一步,并强制泛型类型“属于”该约束。例如,以下C#代码:publicGenericListwhere

c++ - 使用 C++0x 的 unordered_map

我正在使用unordered_map其中包括:#include程序编译如下:g++Test.cc-std=gnu++0x-otest我在使用unordered_map吗?TR1或C++0x的。还是两者相同? 最佳答案 我相信gcc将他们的TR1header放在中,所以你应该得到C++11版本。但它们非常相似。 关于c++-使用C++0x的unordered_map,我们在StackOverflow上找到一个类似的问题: https://stackoverflo

c++ - 使用 valgrind 在内存泄漏检测中抑制 "dl-hack3-cond-1"

我正在使用valgrind来检测内存泄漏。valgrind的输出由命令生成valgrind-v--leak-check=full../spythontest.py2>/tmp/log事实上,我的程序是一个高度简化的python解释器(作业ToT),正如您可以从名称spythontest.py推断的那样困扰我的是底部的输出==24269==ERRORSUMMARY:0errorsfrom0contexts(suppressed:3from3)--24269----24269--used_suppression:3dl-hack3-cond-1这是什么意思?我查了一下,在valgrind的

c++ - std0x 和非 std0x 之间的 Rcpp 不一致

我发现在使用和不使用-std=c++0x编译的Rcpp之间存在奇怪的不一致。考虑表达式Functiondata_frame("data.frame");GenericVectora;a.push_back("17");returndata_frame(a,_["stringsAsFactors"]=0);(编者注:在Rcpp中对DataFrame的强制转换实际上向下转换为R函数,但不允许用户设置该标志。)在“旧”C++(未设置-std=c++0x)中,此代码有效。在现代C++中(w/-std=c++0x设置),这失败了,说“不能将类“pairlist”强制转换为data.frame”。

c++ - 为什么同一内核(超线程)中的两个线程比两个内核的 L1 写访问权限更差?

我编写了一个c/c++程序(printf和std::的混合)来了解不同的缓存性能。我想并行化一个在大块内存上计算的进程。我必须对相同的内存位置进行多次计算,因此我将结果写到位,覆盖源数据。完成第一个微积分后,我会用之前的结果再做一个。我猜想如果我有两个线程,一个执行第一个微积分,另一个执行第二个,我会提高性能,因为每个线程完成一半的工作,从而使处理速度提高一倍。我已经阅读了缓存的工作原理,所以我知道如果做得不好,可能会更糟,所以我编写了一个小程序来衡量一切。(请参阅下面的机器拓扑、CPU类型和标志以及源代码。)我看到了一些奇怪的结果。显然,为了执行计算。如果我在同一个缓冲区或两个不同的

c++ - 在 C++0x 标准中会有 unordered_map,这与 boost unordered_map 相比如何?

哪个更有效率?有什么好的基准吗? 最佳答案 C++11的std::unordered_map规范类似于基于tr1::unordered_map的boost::unordered_map。话虽这么说,还是有一些细微的差别。在C++11中添加右值引用会导致添加可能对性能有用的emplace和emplace_hint函数。C++11现已得到广泛实现,因此您应该能够开箱即用地使用std::unordered_map。C++14不会对其进行重大更改,C++17将(可能)添加insert_or_assign和try_emplace成员函数。

c++ - 在 C++ 0x 中 boost lambda::_1

intmain(){std::vectorv;v.push_back(1);v.push_back(3);v.push_back(2);std::for_each(v.begin(),v.end(),std::cout可以不使用Boost将此代码转换为C++吗?我知道C++0xlambda表达式语法,但没有尝试在这种情况下使用占位符。 最佳答案 在这种情况下不需要占位符,因为lambda捕获参数:std::for_each(v.begin(),v.end(),[](intx){std::cout