草庐IT

include_once

全部标签

c++ - 可以将标准的纯 C header #include 指令放在命名空间中吗?

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Isitagoodideatowrapan#includeinanamespaceblock?我有一个类log的项目在全局命名空间(::log)中。所以,很自然地,在#include之后,每次我尝试实例化日志类的对象时,编译器都会给出一条错误消息,因为用许多三字母方法污染全局命名空间,其中之一是对数函数log().所以有三种可能的解决方案,每一种都有其独特的丑陋副作用。将日志类移动到它自己的命名空间,并始终使用它的完全限定名称访问它。我真的想避免这种情况,因为记录器应该尽可能方便使用。写一个mathwrapp

c++ - C++ 标准是否需要 `#include <math.h>` 来定义 `abs` 中的 `<cmath>` 重载?

C++标准在中定义了一些重载函数。不属于的headerC中的header(因为C没有重载)。其中有floatabs(float),doubleabs(double),longdoubleabs(longdouble),和doubleabs(Integral).另一方面,abs未在C中定义完全没有(它在中),唯一的签名是intabs(int).现在在我的系统上,当使用带有C++程序的C++编译器时,#include不提供C++abs重载,在全局命名空间或std中.另一方面,#include定义std::abs.这正是我所期望的——包含C版本以获取C函数,并包含C++版本以获取C++函数。

c++ - std::call_once vs std::mutex 用于线程安全初始化

我对std::call_once的用途有点困惑。需要明确的是,我完全了解std::call_once的作用以及如何使用它。它通常用于原子地初始化某个状态,并确保只有一个线程初始化该状态。我还在网上看到许多尝试使用std::call_once创建线程安全的单例。作为demonstratedhere,假设您编写了一个线程安全的单例,如下所示:CSingleton&CSingleton::GetInstance(){std::call_once(m_onceFlag,[]{m_instance.reset(newCSingleton);});return*m_instance.get();}

c++ - 编译器如何知道在哪里可以找到#include <stdio.h>?

我想知道MacOSX、Windows和Linux上的编译器如何知道在哪里可以找到C头文件。具体来说,我想知道它如何知道在哪里可以找到带有的#include括号。#include"/Users/Brock/Desktop/Myfile.h"//absolutereference#include//systemrelativereference?我假设它所咨询的系统上有一个文本文件。它如何知道在哪里寻找标题?是否可以修改此文件,如果可以,此文件位于操作系统的什么位置? 最佳答案 编译器构建后,它知道一些标准位置来查找头文件。其中一些与编

c++ - pthread_once() 中的竞争条件?

我在一个线程中有一个std::future正在等待另一个线程中设置的std::promise。编辑:用一个将永远阻塞的示例应用更新了问题:更新:如果我改用pthread_barrier,下面的代码会not阻塞。我创建了一个测试应用程序来说明这一点:基本上类foo创建一个thread在其运行函数中设置一个promise,并在构造函数中等待该promise被设置。一旦设置,它会增加一个atomic计数然后我创建一堆这些foo对象,将它们拆掉,然后检查我的count。#include#include#include#include#include#includestructfoo{foo(s

c++ - Visual Studio 2013 : fatal error C1083: Cannot open include file: 'winsock2.h' : No such file or directory

我将一些“native”c++项目从Windows7上的VisualStudio2010迁移到Windows8.1上的VisualStudio2013。重建给了我这个错误。我意识到我没有安装WindowsSDK,所以我接下来安装了它,但我仍然收到错误消息。还有其他人在其他干净的VS项目迁移中得到这个吗? 最佳答案 我在SDK文件夹下搜索了丢失的文件并找到了它。因为SDK是在我迁移项目后安装的,所以路径未包含在我的项目中。我能够通过添加到我的包含和库路径来解决所有问题。我将以下文件夹添加到我的包含路径中:$(WindowsSdkDir

c++ - 线程安全的惰性初始化:静态vs std::call_once vs双重检查锁定

对于线程安全的惰性初始化,应该在函数std::call_once还是显式的双重检查锁定中首选静态变量?有什么有意义的区别吗?这三个问题都可以看到。Double-CheckedLockSingletoninC++11在Google中出现了两种版本的C++11中的双重检查锁定。AnthonyWilliamsshows都使用显式的内存顺序和std::call_once仔细检查了锁定。他没有提到static,但是该文章可能是在C++11编译器可用之前写的。JeffPreshing在广泛的writeup中描述了双重检查锁定的几种变体。他的确提到使用静态变量作为选项,甚至展示了编译器将生成用于双重

c++ - 错误 : 'cout' : undeclared identifier; though I've included iostream header file in program

我正在尝试编译下面的简单程序。但是,它没有编译并给出错误:errorC2065:'cout':undeclaredidentifier我想问你,为什么我已经在其中包含了iostream头文件,这个程序却不能运行?#includevoidfunction(int){cout提前致谢。 最佳答案 cout流在std命名空间中定义。所以命名它你写:std::cout如果你想把它缩短为cout那么你可以写usingnamespacestd;或usingstd::cout;在写cout之前。任何好的文档来源都会告诉您哪个命名空间包含一个对象。

c++ - 我的 C++ 编译器在哪里解决我的#includes?

这是一个非常基本的问题。我一直在学习C++,到目前为止我只使用了标准库。我一直在包含之类的内容并且没有问题。现在我想使用ApacheXerces,所以我已经将它安装在我的机器(一个Debian系统)上,并且正在遵循一个说我需要包含的教程:#include但是g++说“错误:xercesc/sax2/SAX2XMLReader.hpp:没有这样的文件或目录”。它在看哪里?我需要提供更多信息吗?谢谢。 最佳答案 使用--verbose选项:[...]#include"..."searchstartshere:#includesearch

c++ - 如何正确使用#include 指令?

有没有关于如何正确使用#include的资料?我没有找到任何详细解释这种用法的C/C++教科书。在正式的项目中,我总是在处理它时感到困惑。 最佳答案 总是让我绊倒的一个大问题是:这会在头文件路径中搜索:#include这会在您的本地目录中搜索:#include"myfile.h"你应该对每个标题做的第二件事是:我的文件名.h:#ifndefMYFILENAME_H#defineMYFILENAME_H//putcodehere#endif这种模式意味着你不能在编译中重新定义标题(为orsogufo向我指出这被称为“包含保护”而欢呼)