草庐IT

c++ - 当代码不严格符合标准时,如何强制 clang 抛出错误?

我正在编写一个C++11库,我希望它能与支持C++11的每个编译器一起使用。我不想不小心编写不标准的代码(例如使用VLA或block等语言扩展)。如何强制clang禁用所有语言扩展,以便我只能编写一致的代码? 最佳答案 尝试oneofthese:-pedantic:Warnonlanguageextensions.-pedantic-errors:Erroronlanguageextensions. 关于c++-当代码不严格符合标准时,如何强制clang抛出错误?,我们在StackOve

c++ - 强制转换为 void* 以将对象传递给 C++ 中的 pthread

我对如何将对象传递给pthread_create函数有些困惑。我发现了很多关于转换为void*、将参数传递给pthread_create等的零碎信息,但没有任何内容将它们联系在一起。我只是想确保我已经把它们绑在一起并且没有做任何愚蠢的事情。假设我有以下线程类:编辑:修复了不匹配的static_cast。classProducerThread{pthread_tthread;pthread_attr_tthread_attr;ProducerThread(constProducerThread&x);ProducerThread&operator=(constProducerThread

c++ - 在具有一个元素的列表上强制 std::vector 重载而不是 int 重载

考虑下面的代码:#include#includevoidf(std::vectorv){std::coutLiveonColiru我有点惊讶地发现在这种情况下正在拾取int重载,即程序的输出是:voidf(int)警告warning:bracesaroundscalarinitializer[-Wbraced-scalar-init]f({42});当然,只有当我将1元素列表作为参数传递时才会发生这种情况,否则std::vector正在拾取过载。为什么是{42}被视为标量而不是初始化列表?有没有办法强制编译器选择std::vector即使在1元素列表上也会重载(没有明确构造std::v

c++ - (c/c++) 试图强制 EOF 从父进程发送输入到子进程

我有一个非常简单的c/c++程序,它派生一个子进程来执行另一个程序,然后向该子程序发送一些数据,并等待响应。子程序从stdin读取并在继续之前等待EOF。我的问题是,子程序从管道写入接收到初始输入,但它从未看到EOF(即使我关闭了管道),所以它永远等待。我不确定为什么关闭管道并不意味着child的标准输入的EOF?代码如下:http://gist.github.com/621210 最佳答案 最常见的原因是您没有关闭管道的写入端,因此永远不会发送EOF。常见的例子是当你有如下代码时:intfds[2];pipe(fds);//ope

c++ - 如何将 float 变量分配给 unsigned int 变量,位图,而不是强制转换

我知道这样做很奇怪,而且不可移植。但是我有一个分配的无符号整数数组,我偶尔想在其中“存储”一个float。我不想转换float或将其转换为最接近的等效int;我想将float的精确位图存储在分配给unsignedint的空间中,这样我以后可以将它作为float检索,并且它会保留其原始float值。 最佳答案 这可以通过简单的复制来实现:uint32_tdst;floatsrc=get_float();char*constp=reinterpret_cast(&dst);std::copy(p,p+sizeof(float),rein

C++:强制模板类型实现一个方法

我有一个模板类,我想知道是否可以强制模板类类型实现某个接口(interface),特别是我想强制该类型重载operator=方法.在Java中我会写:publicclassTree{publicTree(Vectorx){...}}C++中的替代方案是什么? 最佳答案 假设它确实如此,只需编写代码即可。否则,当用户传入不符合的类型时,它将无法编译。这里不需要明确的特征。但是为什么你会为此需要像IComparable这样的接口(interface)呢?模板是鸭子类型的。但是模板错误可能会变得很糟糕。您可以使用类型特征和静态断言来简化此

c++ - 用于编译时强制 constexpr 函数评估的单个表达式助手可能吗?

@cyberpunk_正在努力实现某些目标并提出一些问题,但所有的追求都归结为:是否可以构建一个工具来强制执行constexpr函数的编译时评估?intf(inti){returni;}constexprintg(inti){returni;}intmain(){f(at_compilation(g,0));intx=at_compilation(g,1);constexprinty=at_compilation(g,2);}在所有情况下,at_compilation强制执行g的编译时评估。at_compilation不需要采用这种形式。要求允许任何(原生数字)文字类型作为conste

c++ - C++ 标准对超出目标类型范围的类型的强制转换结果有何规定?

最近我不得不执行一些从float到16位整数的数据类型转换。基本上我的代码减少到以下floatf_val=99999.0;shortintsi_val=static_cast(f_val);//si_valisnow-32768这个输入值是个问题,在我的代码中我忽略了检查浮点值的限制,所以我可以看到我的错误,但这让我想知道当必须这样做时语言的确切规则笨拙的Actor。我有点惊讶地发现类型转换的值(value)是-32768。此外,这是我在float的值超过16位整数的限制时得到的值。我用谷歌搜索了这个,但令人惊讶地发现缺乏关于它的详细信息。我能找到的最好的是来自cplusplus.co

c++ - 更改 Makefile 标志时如何强制重新编译?

我正在编译一些具有依赖性的项目,因此我不必每次都重新编译,但是当我将-Dsome_flags添加到我的CFLAGS时,它不会重新编译。dep:$(CPPS)$(CC)$(CFLAGS)$(INC)-M$(CPPS)>dep我添加到我的CFLAS-DDEBUG_FLAG,它迫使我做makeclean和make而不是make。 最佳答案 它不会重新编译,因为您没有将makefile本身列为依赖项。dep:$(CPPS)Makefile$(CC)$(CFLAGS)$(INC)-M$(CPPS)>dep也就是说,如果您从命令行输入make标

c++ - 强制接口(interface)的模板

是否可以创建一个模板来接受实现特定接口(interface)的类型?例如,我想对模板用户说:你可以在我的容器中存储任何东西,只要它实现了Init()和Destroy()方法。谢谢 最佳答案 BoostConceptChecklibrary提供了概念的C++0x功能的有限子集(有意但遗憾地被砍掉了)。.您可以通过创建conceptcheckclass来利用它用于您所需的界面。 关于c++-强制接口(interface)的模板,我们在StackOverflow上找到一个类似的问题: