草庐IT

c++ - 使用 clang 对 std::atomic 函数的调用不明确

我正在尝试使用clang编译我的代码,我之前使用的是g++。我在编译以下代码时遇到错误:#includetypedefvoid(*my_func)();intmain(intargc,char**argv){std::atomic_func;_func();return0;}错误是:a.cpp:23:3:error:calltoobjectoftype'std::atomic'isambiguous_func();^~~~~/usr/bin/../lib/gcc/x86_64-linux-gnu/4.8/../../../../include/c++/4.8/atomic:304:7:

c++ - 为什么 std::is_constructible 在直接上下文中停止?

源自this话题。也与此有关topic.我的问题是为什么std::is_constructible在直接上下文中停止?我认为std::is_constructible的用户会期望它能够深入工作并给出准确的答案。有了这个直接的上下文,你可能会让std::is_constructible给你一个绿灯,只是在你实际执行它时得到一个硬编译器错误。这是否违背了std::is_constructible的最初目标和目的。现在,它对我来说基本上看起来没用。我想std::looks_constructible_at_first_sight是当前语义的更好名称:( 最佳答案

C++ 写入选项

我正在尝试使用std::ofstream打开一个文件进行写入,我想将其设置为直写模式(即像使用CreateFileWinAPI提供的“FILE_FLAG_WRITE_THROUGH”)。是否有一些STL方式来实现它?我不想编写基于WinAPI的代码。我的目标是禁用操作系统缓存并使用不同的block大小执行写入以获得与存储性能相关的数据。我无法使用标准基准测试工具,因为目标是了解如何针对我必须依赖的特定存储优化我的写入层设置。@更新这是一个MWE,我希望在更改blk_size的值时看到不同的保存时间:#include#include#include#include#includestd:

c++ - 如何使用没有复制构造函数的给定类初始化元组

我有一个要求,需要按如下方式初始化元组。如何创建包含A类对象的元组?#include#includeusingnamespacestd;classA{inta;public:A(constA&)=delete;A(inta):a(a){}};std::tuple&createTuple(A&&a){returnstd::make_tuple(std::forward(a));}intmain(){std::cout(createTuple(std::forward(A(1))));}我不能以任何方式修改A类。 最佳答案 像这样:st

c++ - `std::pair` `second` 具有不完整的类型与 `unordered_map` 树

我正在审查我的一些旧代码,我看到代码使用指针来实现Variant的树。对象。它是一棵树,因为每个Variant可以包含unordered_map的Variant*.我查看了代码,想知道为什么它不只是使用值,std::vector,和std::unordered_map,而不是Variant*.所以我继续修改它。除了一件事似乎没问题,我得到了errors:/usr/local/include/c++/6.1.0/bits/stl_pair.h:153:11:error:'std::pair::second'hasincompletetype_T2second;///@csecondisa

c++ - 如何使用 clang 和选项 -std=c++11 编译项目,使用 autotools

我正在使用C和C++代码开发软件。我最近在c++11标准中添加了一些代码。在configure.ac我写道:forfin'-std=c++11''-std=c++11-stdlib=libc++'doAX_CHECK_COMPILE_FLAG([$f],[CXXFLAGS="$CXXFLAGS$f"stdpass=true],[],[],[])${stdpass-false}&&breakdoneif!"${stdpass-false}";thenAC_MSG_ERROR([UnabletoturnonC++11modewiththiscompiler])fi使用gcc我没问题,一切顺

c++ - 在 C++ 中存储一组坐标集(成对 vector 的 vector ?)

首先,我是C++的新手,所以我可能不得不深入研究伪代码和/或Python来解释我正在尝试做的事情...我正在尝试为动画的每一帧存储多个Sprite的X和Y坐标对。我设想这类似于以下内容-假设PLAIN==1(使用枚举):animationFrames[PLAIN][0]={20,50}animationFrames[PLAIN][1]={25,55}等等。我基本上希望能够使用相关Sprite的ID查询animationFrames并接收一组X、Y坐标以进行迭代。我发现这很棘手。这是我的尝试,但没有用...std::vector>>frames={{{1,1},{2,2}//twofra

c++ - 当涉及参数包时,我可以依赖具有默认值的参数类型被推断为空包这一事实吗?

考虑一个例子:#include#include#includetemplatevoidfoo(std::tuplet,std::index_sequence={}){if(sizeof...(Ts)!=sizeof...(Is)){foo(t,std::make_index_sequence{});return;}(std::cout(t));}intmain(){foo(std::make_tuple(1,2,3));}我假定函数的第二个参数的类型foo默认情况下将推导为std::integral_sequence因此我不必创建辅助函数来使用Is...元组元素的索引,但可以调用foo

c++ - 使用省略号的回退函数 : can we force the size of the parameters pack?

考虑以下代码:#include#includestructS{templateautof(A&&...args)->decltype(std::declval().f(std::forward(args)...),void()){std::coutvoidf(...){std::cout(42);//->hasf(int)s.f(42);//->hasnotf(int)//oopss.f();//->hasnotf(int)}如示例所示,对f的第三次调用工作正常,即使参数数量错误,因为对于回退函数来说它根本没有错.当以这种方式涉及省略号时,有没有办法强制参数的数量?我的意思是,我可以在

c++ - 读写同一个文件fstream

我想更新现有的json文件。这是示例json文件:{"Foo":51.32,"Number":100,"Test":"Test1"}程序日志:Operationsuccessfullyperformed100"Test1"51.3246.32Done看起来一切都按预期工作......如果我将fstream更改为ifstream以进行读取,然后将ofstream更改为写入它正在工作...我尝试使用调试器,正如我所见,basic_ostream对象中的数据有误...但我不知道为什么,我使用来自字符串的经过更正(更新的数据)的数据。知道出了什么问题:-)吗? 最佳