草庐IT

include-guards

全部标签

C++:使用命名空间和#include

在C++中,#include指令和usingnamespace有什么区别?您是否也将命名空间存储为单独的文件,这些文件的文件扩展名是什么? 最佳答案 在C++中,#include用于将文件添加到项目中,而namespace用于将对象保存在逻辑模块中(命名空间不适用于C)例如,您可能在文件“vector.h”中有一个vector类,因此您将其包含在您的项目中。vector是大型库(标准库)STD的一部分,因此您可以使用std::vector但是由于程序员很懒,不想到处写std::(标准库有很多很多非常有用的部分),你可以写usingn

c++ - 为什么省略 "#include <string>"只是有时会导致编译失败?

我是C++的初学者。当我写代码时,有时我会写#include并且代码有效,其他时候我不写#include并且代码不起作用。但有时它可以在没有#include的情况下工作.所以我必须写#include这样代码才能工作? 最佳答案 如果您使用在标准headerstring中声明的成员,那么可以,您必须直接或间接(通过其他header)包含该header。some平台上的Some编译器可能在每月的某些时间编译,即使您未能包含header。这种行为是不幸的、不可靠的,并不意味着您不应该包含标题。原因很简单,您添加了其他标准标题,而也恰好包含

c++ - 在 C++ 中使用 #include<filename> 和 #include<filename.h> 的区别

使用#includeand#include有什么区别?>在C++?两者都用哪一个,为什么用? 最佳答案 C++onlyinclude-filesnotfoundintheCstandardneverusedfilename.h。自从第一个C++标准问世(1998年)以来,他们就使用filename作为自己的header。由C标准继承的文件变为cfilename而不是filename.h。像filename.h这样继承使用的C文件已被弃用,但仍是C++标准的一部分。不同之处在于,在C++中未定义为宏的名称位于命名空间std::中的cf

c++ - 清理你的#include 语句?

如何在C或C++项目中维护#include语句?似乎几乎不可避免的是,文件中的包含语句集最终要么不足(但由于项目的当前状态而恰好可以工作)或包含不再需要的内容。您是否创建了任何工具来发现或纠正问题?有什么建议吗?我一直在考虑编写一些东西,多次单独编译每个非头文件,每次都删除#include语句。继续这样做,直到获得最少的包含集。为了验证头文件是否包含他们需要的所有内容,我将创建一个源文件,它所做的只是包含一个头文件并尝试编译它。如果编译失败,则头文件本身缺少包含。在我创造一些东西之前,我想我应该在这里问一下。这似乎是一个有点普遍的问题。 最佳答案

c++ - 在额外范围内包含 std::lock_guard

将std::lock_guard放在额外的范围内以使锁定期尽可能短是否有意义?伪代码://allusedvariablesbesidethelock_guardarecreatedandinitializedsomewhereelse...//dosomething{//opennewscopestd::lock_guardlock(mut);shared_var=newValue;}//closethescope...//dosomeotherstuff(thatmighttakelonger)除了锁定时间短,还有其他优势吗?可能有什么负面影响? 最佳答案

c++ - 是否有 std::lock_guard<std::mutex> lock(m) 的简写?

正是问题所述。在C++中,理想情况下是11,但也对14及更高版本感到好奇,是否有以下简写语法:std::mutexsomeMutex;std::lock_guardlg(someMutex);如果我想更改为std::recursive_mutex,最好是推断互斥锁的类型以避免重构.换句话说,一种方法:std::mutexsomeMutex;std::lock_guardlg(someMutex);或者autolg=make_lock_guard(someMutex);对于现代C++的所有类型推断能力,输入std::lock_guard似乎是非常多余的。每次我想做一个。

c++ - "include"应该放在 C++ 中的哪个位置

我正在阅读一些c++代码,请注意头文件和.cpp文件中都有“#include”。我想如果我将文件中的所有“#include”(比如说foo.cpp)移动到它的头文件foo.hh并让foo.cpp只包含foo.hh代码应该可以正常工作,而不考虑诸如此类的问题缺点,效率等等.我知道我的“突然”想法在某种程度上肯定是个坏主意,但它的确切缺点是什么?我是C++新手,所以在我自己回答这个问题之前,我不想阅读大量C++书籍。因此,请在此处提出问题以寻求帮助。提前致谢。 最佳答案 作为一项规则,尽可能将您的包含放入.cpp文件中,并且仅在不可能的

c++ - #include<iostream> 存在,但我收到错误 : identifier "cout" is undefined. 为什么?

我通过书籍学习C++和COM。在IDEMSVisualStudio2012中,我创建了新的空C++项目,并向其中添加了一些现有文件。我的CPP文件包含#include行,但在编辑器中我收到了这样的消息:Error:identifier"cout"isundefined结束Error:identifier"endl"isundefined代码:#include#include"interfaces.h"//unknown.h,objbase.h,initguid.hclassCA{//:publicIX,IY{public://ConstructorCA();//Destructor~C

c++ - 我还应该使用#include guard 和#pragma 一次吗?

http://en.wikipedia.org/wiki/Pragma_once当所有这些编译器都支持#pragmaonce时,我还应该使用包含防护吗?很多关于堆栈溢出的响应都说要同时使用两者以实现兼容性,但我不确定这是否仍然正确。现在有哪些编译器不支持#pragmaonce?我不确定这两种方法在被广泛采用之前是否只是一个建议,或者是否仍有充分的理由同时使用这两种方法。仅使用#pragmaonce会导致问题的任何示例? 最佳答案 这取决于您的程序的可移植性。只要您编写的程序应该与您知道肯定支持#pramaonce的编译器一起工作,只

C++ : Difference between linking library and adding include directories

很多标题都概括了。如果我想使用库,我不确定两者之间的区别。谢谢! 最佳答案 一般来说,两者都需要。包含文件包含类型的声明、函数的原型(prototype)、inline函数、#defines、...,通常是所有信息关于编译器在编译文件时需要注意的库。相反,静态库包含库函数的实际目标代码。如果header包含原型(prototype),则静态库包含(编译的)函数的定义,即链接器将与您的链接器链接的对象模块。如果你只包含头文件而不链接静态库,链接器会提示缺少定义,因为你会在头文件中使用declared函数,而不是defined任何地方(