草庐IT

c++ - C++11 <codecvt> header 在最新的 GCC 中可用吗?

看完Isnotastandardheader?我不确定该怎么做,因为我的Windows版本的代码库使用在宽字符串和字符串之间进行转换。我目前在我的代码的Linux版本中使用GCC4.7。是在最新的GCC中也丢失了吗?有什么解决方法?顺便说一句,正如它所说的here以下代码不适用于GCC:wstringws=L"hello";stringns(ws.begin(),ws.end()); 最佳答案 使用mbsrtowcs和wcsrtombs怎么样?尽管它们来自C,但与std::string和std::wstring一起使用不是很方便(但

c++ - 使用 _GLIBCXX_CXX11_ABI 来使用具有 C++ 11/14 功能的 pre-5.1 C++ ABI 有什么影响?

来自themanual:IntheGCC5.1releaselibstdc++introducedanewlibraryABIthatincludesnewimplementationsofstd::stringandstd::list.Thesechangeswerenecessarytoconformtothe2011C++standardwhichforbidsCopy-On-Writestringsandrequiresliststokeeptrackoftheirsize.可以使用_GLIBCXX_USE_CXX11_ABI宏来控制库header是使用旧ABI还是新ABI,而

c++ - 字符串文字连接的正确行为(C++11 翻译的第 6 阶段)

我很确定VisualC++2015在这里有一个错误,但我不能100%确定。代码://Encoding:UTF-8withBOM(requiredbyVisualC++).#includeautomain()->int{autoconsts=L"""?isnotintheUnicodeBMP!";returns[0]>256?EXIT_SUCCESS:EXIT_FAILURE;}使用g++的结果:[H:\scratchpad\simple_text_io]>g++--version|find"++"g++(i686-win32-dwarf-rev1,BuiltbyMinGW-W64pro

c++ - Boost.Phoenix 是否天生就比等效的 C++11 lambda 慢(它是否使用虚拟调用、 'volatile' 用法等)?

我一直认为Boost.Phoenix使用类型推断来静态推断所有内容,直到我尝试了这段代码:#include#includeusingnamespaceboost::phoenix;usingnamespaceboost::phoenix::placeholders;structFoo{intx;};intmain(){std::vectorbar;bind(&Foo::x,ref(bar)[_1])("invalidindex");//oopsreturn0;}并得到警告:warningC4239:nonstandardextensionused:'argument':conversi

c++ - Netbeans 7.2 中无法识别的命令行选项 "-std=c++11"c++

我正在尝试使用C++11。通过互联网筛选后,我发现我所要做的就是右键单击我的项目->属性,然后在“C++标准”下选择C++11。当我使用C++11运行程序时,出现此错误“无法识别的命令行选项-std=c++11.人们说的一种解决方案是在“附加选项”中添加-g-std=c++0x但随后我得到“无法识别的命令行选项-std=c++0x。我已经下载了gcc-4.7.1.tar.gz,但我不知道如何使用它。有谁知道如何摆脱这个错误或知道如何使用c++11编译netbeans? 最佳答案 将你的gcc版本升级到4.7+。从gcc4.3开始支持

C++11 initializer_list 构造函数标记为 "explicit"

我能否将explicit与init-list构造函数一起使用,以确保像{a}这样的表达式不会导致意外的隐式转换?还有一个想法:应该我担心吗?编写{a}比简单地编写a不太可能出错,但另一方面,从代码中我们可能仍然不清楚我们正在构建一个通过隐式转换对象。classFoo{explicitFoo(std::initializer_listilist){/*...*/}}; 最佳答案 你不能。它确实导致意外的隐式转换。但是,意外的隐式转换是不允许的,编译器将拒绝您的程序。然而,这不会阻止编译器选择或考虑它。示例voidf(Foo);void

c++ - C++11 构建事件循环的方法

C++11中事件循环系统的基本结构是什么?关键元素(如消息队列、消息分发器、信号)是如何实现的?例如,我还需要std::queue吗?,一个std::mutex和一个std::condition_variable就像我在c++98+boost中所做的那样?此外,性能对我正在寻找的解决方案很重要。 最佳答案 按照与在C++98中执行的方式大致相同的方式执行。您可以用标准化的等价物(std::thread、std::{recursive_,}{timed_,}mutex和std::condition_variable{,_any})替换

c++ - DirectX 11 - 计算着色器 : Writing to an output resource

我刚开始在DirectX11中使用计算着色器阶段,在向计算着色器中的输出资源写入时遇到了一些不需要的行为。我似乎只得到零作为输出,据我所知,这意味着在计算着色器中执行了越界读取。(越界写入导致空操作)创建计算着色器组件输入资源首先,我为输入数据创建了一个ID3D11Buffer*。在创建用于输入到计算着色器阶段的SRV时,它作为资源传递。如果输入数据永远不变,那么我们可以在创建SRV后释放ID3D11Buffer*对象,因为SRV将充当资源句柄。但是,我想在每一帧更新输入数据,所以我将保留缓冲区供我使用以进行映射。//CreateabuffertobeboundasComputeSha

c++ - 原子访问 C++11 和 OpenMP 中的非原子内存位置?

与C++11相比,OpenMP从内存操作而非变量的角度处理原子性。例如,这允许在编译时对存储在大小未知的vector中的整数使用原子读/写:std::vectorv;//non-atomicaccess(e.g.,inasequentialregion):v.resize(n);...v.push_back(i);...//atomicaccessinamulti-threadedregion:#pragmaompatomicwrite//seq_cstv[k]=...;#pragmaompatomicread//seq_cst...=v[k];在C++11中,这是不可能实现的。我们可

python - 需要哪个 $path 以便 g++/pybind11 可以找到 Python.h?

我开始使用pybind11(在Ubuntu16.04和Python2.7上)。为了试水,我围绕我的C++库创建了一个无操作的包装器。唉,编译找不到Python.h:$g++-std=c++0x-fPIC-pedantic-g-Wno-missing-field-initializers-Wno-switch-Wno-multichar-ftree-vectorize-ftree-vectorize-mssse3backend.huvc-v4l2.cppwrap.cpp-owrap.sobackend.h:4:9:warning:#pragmaonceinmainfile#pragmao