草庐IT

c++ - 按值返回由互斥量保护的 shared_ptr 是否安全?

这是一个代码示例:classA{boost::mutexa_mutex;boost::shared_ptra;boost::shared_ptrclone_a(void){boost::lock_guardlock(a_mutex);returna;}};建议boost::shared_ptr对A::a的复制构造函数调用将在boost::lock_guard析构函数调用之前尽管有编译器优化。那么,调用A::clone_a()安全吗? 最佳答案 如果您所说的“安全”是指您不会在a上发生数据竞争,那么是的。正如你所说。但是,正如您可能知

c++ - C中double **和double (*)[2]的区别

double**和double(*)[2]有什么区别。如果我理解得很好,double**是指向double指针的指针,因此它可以是任意大小的二维数组,而double(*)[2]是指向double[2]数组的指针.那么如果是对的,如何才能成功传递给函数。例如:voidpcmTocomplex(short*data,double*outm[2])如果我传递double(*)[2]作为参数,我会收到以下警告:warning:passingargument2of‘pcmTocomplex’fromincompatiblepointertypenote:expected‘double**’but

c++ - MacOS 的 "-std=gnu++0x"选项

我正在尝试编译一个使用的CMake项目set(CMAKE_CXX_FLAGS${CMAKE_CXX_FLAGS}"-Wall-std=gnu++0x")在MacOSXLion下的CMakeLists.txt文件中。我已经安装了XCode4.2.1。但是编译器失败了:cdsomething/src/lib&&/usr/bin/c++-Dlib_ginacra_EXPORTS-Wall-std=gnu++0x-fPIC-oCMakeFiles/lib_ginacra.dir/utilities.cpp.o-csomething/src/lib/utilities.cppcc1plus:er

c++ - 将特定的 gcc 警告变成错误

所以我知道我可以使用-Werror=...将警告变成错误,但我想将以下警告变成错误:“类xxx有虚函数但非虚析构函数”据我所知,您遇到此错误的唯一方法是打开过于讨厌的-Weffc++标志。有没有一种方法(或者-Weffc++中这个警告的子标志是什么)只打印这个警告然后把它变成一个错误?谢谢! 最佳答案 -Wnon-virtual-dtor是-Weffc++开启的特定警告名称。要将任何警告变成错误,您可以使用-Werror=...。因此,如果警告是-Wspam,则将其变成错误将是-Werror=spam。所以在这种情况下,您将使用-W

c++ - 常量 QList<int> 警告 = QList<int>() << 0; gcc 4.7.2 的段错误

因此主题行中提到的代码会导致Qt4.8.3和gcc4.7.2出现段错误这在.cpp文件中的任何类/结构之外,适用于gcc4.4constQListwarnings=QList()Traces给出了这两个提示:__do_global_ctors()__static_initialization_and_destruction_0所以当它插入后面的列表时,似乎“警告”还不可用。如果我把它改成这样,就可以与4.7.2一起工作:globalscope:QListwarnings;这是一些函数:warnings=QList()我想知道为什么会这样?编辑:我想我最初从我的问题中删掉了太多东西,但是

c++ - 了解 "template argument is invalid"错误消息

考虑代码:#include#includestructtest1{voidInvoke(){};};structtest2{templatevoidInvoke(){};};enumclassInvokableKind{NOT_INVOKABLE,INVOKABLE_FUNCTION,INVOKABLE_FUNCTION_TEMPLATE};templatestructget_invokable_kind{conststaticInvokableKindvalue=InvokableKind::NOT_INVOKABLE;};templatestructget_invokable_ki

c++ - VC++ 和 GCC 下 boost::condition_variable 的不同行为

在我的计算机上,在Windows7上运行,以下代码在带有Boost1.53的VisualC++2010中编译,输出notimeoutelapsedtime(ms):1000使用GCC4.8编译的相同代码(onlinelink)输出timeoutelapsedtime(ms):1000我的意见是VC++输出不正确,应该是timeout。有没有人在VC++中有相同的输出(即notimeout)?如果是,那么它是否是boost::condition_variable的Win32实现中的错误?代码是#include#includeintmain(void){boost::condition_v

c++ - 如何通过 KIT 编译收缩层次结构?

我正在尝试编译ContractionHierarchiesImplementation由KIT提供。此软件已于2009年发布,此后显然没有得到维护。由于同时发生了一些变化(使用新的C++标准和编译器版本),代码不再编译现成的。README在编译说明方面不是很冗长,它说您应该只调用make。但是,使用make会出现以下错误:g++-Wall-W-Wno-unused-parameter-O6-c-omain.omain.cppInfileincludedfrom/usr/include/c++/4.8/ext/hash_map:60:0,fromcommand/../io/../data

c++ - 使用 gcc 或 clang 自动生成 header

给定源文件source.cpp我如何生成适当的headersource.hpp?我在linux64位下,我想避免手动编写header以减少我花在编写代码上的时间并限制可能的错误。 最佳答案 您无法从源文件自动生成适当的header,因为没有关于什么是适当的header的正式定义。特别是,从源文件中提取声明的工具无法知道声明是否应为翻译单元私有(private)或在其他翻译单元之间共享。在第一种情况下,标题中的声明恕我直言是不合适的。 关于c++-使用gcc或clang自动生成header

c++ - TDM-GCC w64 脚本更改 32 位的 windres?

尝试让TDM-GCC(4.7.1)在XPSP3上运行-我现在只需要一个c++32位版本。似乎windres的格式不正确,我的.rc文件构建失败:x86_64-w64-mingw32-g++.exe-Wall-m32-s-D_M_X86-DBUILD_DLL-DNDEBUG-cC:\SynthEditSDK\TD_SV\SV.cpp-oobj\Release\TD_SV\SV.owindres.exe-Jrc-Ocoff-iC:\SYNTHE~1\TD_SV\TD_SV.rc-oobj\Release\TD_SV\TD_SV.resx86_64-w64-mingw32-g++.exe-s