草庐IT

include-guards

全部标签

c++ - 返回时复制操作是在 lock_guard 析构函数之前还是之后执行的?

这个问题在这里已经有了答案:C++returnvaluecreatedbeforeorafterautovardestruction?(2个答案)inC++whichhappensfirst,thecopyofareturnobjectorlocalobject'sdestructors?[duplicate](4个答案)关闭4年前。get_a()函数对于竞争条件是否安全,或者我是否需要像在get_b()中那样显式复制str_以便按顺序有一个线程安全的功能?classClass{public:autoget_a()->std::string{auto&&guard=std::lock_

c++ - 如何使用 lock_guard 和 try_lock_for

我可以使用boost::lock_guard获取boost::mutex对象上的锁,并且此机制将确定一旦boost::lock_guard超出范围将释放锁:{boost::lock_guardlock(a_mutex);//Dothework}在这种情况下,无论代码块是否因异常退出,a_mutex都会被释放。另一方面,boost::timed_mutex也支持方法try_lock_for(period),例如if(a_timed_mutex.try_lock_for(boost::chrono::seconds(1))){//Dotheworka_timed_mutex.unlock(

c++ - 在#include 语句中使用垃圾字符没有编译器错误

#includegfhgfhgfusingnamespacestd;intmain(){return0;}为什么这个代码片段可以编译?根据ThegccreferenceonIncludeSyntax:Itisanerrorifthereisanything(otherthancomments)onthelineafterthefilename.这正是代码中所做的。 最佳答案 在gcc和clang中使用-pedantic-errors标志将其转换为错误seeitlive:error:extratokensatendof#include

c++ - cmake 和 eclipse : default include paths?

我有一个使用CMake系统构建的项目,我喜欢将其导入到Eclipse中。但是,当我使用'cmake-G"EclipseCDT4-UnixMakefiles"'生成eclipse项目文件时Eclipse项目中没有默认包含路径(例如/usr/include'或标准头文件的gcc路径)。如何以最正确的方式解决这个问题?系统:Linux海湾合作委员会4.3.3cmake2.6.4eclipse3.5.1 最佳答案 您必须转到项目属性(项目上的右键),“C/C++包含路径和符号”并将它们添加到此处作为“外部包含路径”。

c++ - C1083 : Cannot open include file: math. h: 没有那个文件或目录

我遇到了一堆这样的错误,我已经走投无路了。在谷歌上找到了很多答案,但不幸的是没有一个有效我正在使用VisualStudio2012。它说找不到的所有文件都在我电脑的这个文件夹里C:\ProgramFiles\MicrosoftVisualStudio11.0\VC\include即使我右键单击include语句并单击“打开文档”,它也会将我带到文档,因此它清楚地存在并且可以看到我也尝试将目录添加到选项中的“其他目录”字段,但没有解决。如果我像这样使用包含完整路径的include语句:#include然后就可以了,但是如果math.h文件有任何include语句,我也需要添加它们的路径等

c++ - 为什么不包括 guard 或编译指示一旦工作?

我正在编译一些代码,这些代码依赖于includeguards来防止对象和函数的多个定义,但是VisualStudio2008给我的链接错误是有多个定义。我不明白为什么,因为我以前使用过与此非常相似的代码并且没有引起问题。我一定是在做一些愚蠢的事情,但我不知道那是什么。我还尝试删除包含保护程序并使用一次#pragma,但我遇到了相同的链接错误。我应该检查什么? 最佳答案 如果它们是链接器错误,最可能的原因可能是header中定义的非内联函数。如果您在包含在多个源文件中的header中有一个非内联函数,它将在每个源文件(“翻译单元”)中

c++ - #include 父目录的文件

我的文件夹结构是libAx.hy.halgorithm/a.h现在在a.h中我有#include"libA/x.h"不工作。它正在搜索algorithm/libA/x.h。那么我应该使用#include"../x.h"吗?第二种选择是糟糕的设计吗?目前libA只是header。但后者我可能会选择将其编译为库我正在使用cmake那么我可以或应该在我的包含路径中添加libA吗?简而言之我的算法目录中的某些文件需要包含其父文件夹中的定义。我无法将所有函数都模板化,因为类型很明显,而且会做得太过分。那么我应该如何设计我的项目? 最佳答案 您

c++ - #include <initializer_list> 需要在基于范围的情况下使用初始化列表吗?

最终的C++11标准包括对基于范围的for的规定,以便在不必包含的情况下“仅适用于”native数组。或任何其他标题。据我所知,这首先在工作文件n2900中得到解决。作为评论UK78和79的结果。该提案还包括一项隐式规定#include在每个翻译单元中,例如程序#includeintmain(){for(autoi:{1,2,3,4,5})std::cout即使不包含也会符合标准.然而,当概念从C++11中删除时,基于范围的for被修改,如n2930中所示.虽然数组“正常工作”的规定仍然存在,但没有提到初始化列表也是如此;确实是各种标准库容器头文件的规范#include而8.5.4.2

c++ - std::string 可以在没有#include <string> 的情况下使用吗?

这个问题在这里已经有了答案:Whydoesomissionof"#include"onlysometimescausecompilationfailures?(7个答案)关闭7年前。这是我的代码:#includeintmain(intargc,charconst*argv[]){std::strings="hello";std::cout令我惊讶的是,我可以用clang++编译和运行它,虽然我什至不添加#include.那么,有必要加上#include吗?为了使用std::string?

c++ - 我如何知道 Ubuntu 11.04 中 gcc、g++/c++ 的 "default include directories"、 "default link directories"和 "default link libraries"?

对于以下3种编译情况:gcc-ohellochello.c(1)g++-ohellocpphello.cpp(2)c++-ohellocpphello.cpp(3)我如何知道每种情况下的“默认包含目录”、“默认链接目录”和“默认链接库”?我在32位Ubuntu11.04环境中使用gcc4.5.2。对于情况(1),gcc使用的是标准C库还是GNUC库?这两个C库之间有区别吗?比较情况(2)和(3),编译器使用的“默认链接库”有什么不同吗?他们使用的是标准C++库还是GNUC++库?这两个C++库有什么区别?提前感谢您的任何建议。曾国荣 最佳答案