草庐IT

c++ - 内部与外部包括 guard

我听说您应该更喜欢编写内部包含保护而不是外部包含保护。我在互联网上搜索过,但没有找到答案。这是Herb&Andrei的C++编码标准一书的片段,其中显示了“外部包含防护”:Avoidusingtheobsoleteexternalincludeguardsadvocatedinolderbooks:#ifndefFOO_HJNCLUDED_//NOTrecommended#include"foo.h"#defineFOO_HJNCLUDED_#endif现在,这导致了下面的问题:问:什么是内部包含守卫,什么是外部包含守卫?两者有什么区别,为什么internalincludeguards

c++ - 如何处理 Boost.Spirit 生成的警告?

我最近安装了boost,并且正在试验Spirit库。我编译了一个简单的例子,它解析一个逗号分隔的数字列表并将它们加在一起。该程序已编译,但我的编译器(VS2013)发出了大量警告。查看源代码:#include#include#include#include#include#include#include#include#include#includenamespaceqi=boost::spirit::qi;namespaceascii=boost::spirit::ascii;namespacephoenix=boost::phoenix;usingqi::double_;using

c++ - 使用不同的实现文件来实现多态是不是可以?

如果给定接口(interface)有多个所需的实现,但所需的具体实现在编译时就已知,那么简单地将make文件定向到同一header的不同实现文件是否错误?例如,如果有一个定义汽车的程序(Car.h)//Car.hclassCar{public:stringWhatCarAmI();}并且在构建时我们知道我们想要它是法拉利还是菲亚特,给每个相应的文件://Ferrari.cpp#include"Car.h"stringCar::WhatCarAmI(){return"Ferrari";}而对于另一种情况(不出所料)//Fiat.cpp#include"Car.h"stringCar::W

c++ - 从文件中删除注释并保留整数

我正在尝试从我的.txt文件中删除评论。我的文本文件如下所示:(*SunspotdatacollectedbyRobinMcQuinnfrom*)(*http://sidc.oma.be/html/sunspot.html*)(*Month:174901*)58(*Month:174902*)63(*Month:174903*)70(*Month:174904*)56注释是(*和*)之间的所有内容。我只需要保留此文件中的58、63、70和56。我的代码删除了一些字符,但没有正确删除。我的代码如下所示:#include#include#include#include#include#in

C++为什么我不能在具有已删除默认构造函数的对象上使用交换

这个问题在这里已经有了答案:Whydoesamoveconstructorrequireadefaultconstructorforitsmembers?(3个答案)关闭5年前。我正在尝试为使用类Id的对象A实现一个move构造函数。类ID是自动生成的,为了将来编码的完整性,我选择在这样做时删除默认构造函数。然而,当我尝试在A的move构造函数中使用swap时,它会提示Id的默认构造函数被删除。我以为swap不是构造任何新对象,而只是交换两个项目的地址。我是不是误会了,它实际上是在创建Id的第三个临时实例??如果是这种情况,实现下面的move构造函数的最佳方法是什么?我在下面包含了一个

c++ - 无法使用 vkCreateWin32SurfaceKHR 创建 vulkan 表面

我想将vulkan与SDL2一起使用,但我停留在表面创建阶段,我无法使用vkCreateWin32SurfaceKHR扩展函数以及VkWin32SurfaceCreateInfoKHR扩展结构,因为它们未定义,虽然我在使用其他扩展元素(如(vkGetPhysicalDeviceSurfaceSupportKHR等..))时没有任何问题,但表面扩展是否需要单独的头文件?我怎样才能让它工作?我使用的预处理器指令如下#include#include#include#include#include#include#defineVK_USE_PLATFORM_WIN32_KHR请注意,我在没有任

c++ - 如何使用 clang libc++ 进行静态链接

我刚刚用c++2a写了一个coroutine的测试代码。我使用clang5.0构建代码:clang++testcoroutine.cpp-std=c++2a-I../asio_alone-fcoroutines-ts-stdlib=libc++代码运行良好。现在我想静态链接libc++。这样我就可以在其他PC上运行a.out,我用谷歌搜索但只找到了-static-libstdc++。我不能使用-static-libstdc++因为libstdc++不支持coroutine。如果我使用-static-libstdc++:clang++testcoroutine.cpp-std=c++2a

C++:在多个文件中定义类

根据OneDefinitionRule(ODR):Intheentireprogram,anobjectornon-inlinefunctioncannothavemorethanonedefinition;ifanobjectorfunctionisused,itmusthaveexactlyonedefinition.这些是我要编译的文件:A.cpp#include#include"Greet.h"intmain(){greet();std::cin.get();}B.cpp#include"Greet.h"问候.h#includevoidgreet(){std::cout我收到了

c++ - CA2W 给了我一个 "' AtlThrowLastWin3 2': identifier not found"错误

当我遵循MSDNdocument时,我遇到了一个奇怪的编译错误在VisualStudio2005中使用CA2W将big5字符串转换为unicode字符串。这是我写的代码:#include#include#includeusingnamespacestd;int_tmain(intargc,_TCHAR*argv[]){stringchineseInBig5="\xA4\xA4\xA4\xE5";ATL::CA2W(chineseInBig5.c_str());return0;}编译错误:errorC3861:'AtlThrowLastWin32':identifiernotfound我

c++ - 功能性、bind1st 和 mem_fun

为什么不能编译?#include#includeclassA{A(){typedefboost::functionFunctionCall;FunctionCallf=std::bind1st(std::mem_fun(&A::process),this);}voidprocess(){}};错误:Infileincludedfrom/opt/local/include/gcc44/c++/bits/stl_function.h:712,from/opt/local/include/gcc44/c++/functional:50,froma.cc:1:/opt/local/includ