草庐IT

additional_header

全部标签

c++ - 是否有任何理由在没有方法的 header 上使用 extern "C"?

我经常遇到包含extern"C"保护的C头文件,但不包含任何实际功能。例如:/*b_ptrdiff.h-basetypeptrdiff_tdefinitionheader*/#ifndef__INCb_ptrdiff_th#define__INCb_ptrdiff_th#ifdef__cplusplusextern"C"{#endif#ifndef_PTRDIFF_T#define_PTRDIFF_Ttypedeflongptrdiff_t;#endif/*_PTRDIFF_T*/#ifdef__cplusplus}#endif#endif/*__INCb_ptrdiff_th*/我知

c++ - 是否有任何不属于 C++ 标准库的 STL header ?

我知道一些C++标准库头文件源自STL,例如vector。但是我找不到标准库中仍未包含的STLheader的最新列表。它们存在吗?PS:我想把它们列出来,如果可能的话,我也想知道是否所有主要的实现都包含它们或者从哪里获得它们。 最佳答案 注意,这是逐个函数分解,而不是按标题分解,因为它似乎更有用。如果我们检查SGI'sdocumentationoftheSTL我们发现以下内容:slist已更名std::forward_list.bit_vector已被std::vector的模板规范取代.这个实现可以(不是必须)以bit_vecto

c++ - 是否有任何不属于 C++ 标准库的 STL header ?

我知道一些C++标准库头文件源自STL,例如vector。但是我找不到标准库中仍未包含的STLheader的最新列表。它们存在吗?PS:我想把它们列出来,如果可能的话,我也想知道是否所有主要的实现都包含它们或者从哪里获得它们。 最佳答案 注意,这是逐个函数分解,而不是按标题分解,因为它似乎更有用。如果我们检查SGI'sdocumentationoftheSTL我们发现以下内容:slist已更名std::forward_list.bit_vector已被std::vector的模板规范取代.这个实现可以(不是必须)以bit_vecto

c++ - 在 C++ 命名空间中包含 C header - 这是标准行为吗?

我一直认为C头文件必须包含在C++程序的顶层。无论如何,我偶然发现C++允许在子命名空间中包含Cheader。namespaceAAA{extern"C"{#include"sqlite3.h"//CAPI.}}然后,所有的C类型和函数都将放在命名空间中。更有趣的是,所有链接的C函数也正常工作!我还发现这可能会导致一些预处理器问题,但除此之外,它似乎工作得很好。这是标准行为吗?(我使用的是Clang3.x)如果是,这个特性的名称是什么,我在哪里可以找到标准中提到的这个特性? 最佳答案 你甚至可能会做一些奇怪的事情,比如//test.

c++ - 在 C++ 命名空间中包含 C header - 这是标准行为吗?

我一直认为C头文件必须包含在C++程序的顶层。无论如何,我偶然发现C++允许在子命名空间中包含Cheader。namespaceAAA{extern"C"{#include"sqlite3.h"//CAPI.}}然后,所有的C类型和函数都将放在命名空间中。更有趣的是,所有链接的C函数也正常工作!我还发现这可能会导致一些预处理器问题,但除此之外,它似乎工作得很好。这是标准行为吗?(我使用的是Clang3.x)如果是,这个特性的名称是什么,我在哪里可以找到标准中提到的这个特性? 最佳答案 你甚至可能会做一些奇怪的事情,比如//test.

C++14 警告 : too many template headers for variable (should be 0)

在尝试最近的g++-5编译器时,我在一个文件中写了以下语句:templateTa;templateinta=1;结果:warning:toomanytemplateheadersfora(shouldbe0)同样有效,它并没有真正专门化a.例如templateTa;templateinta=1;intmain(){std::cout这个语法有什么奥秘? 最佳答案 模板参数只能在function模板的显式特化中被省略。你有一个变量模板,所以你必须包含:templateinta=1;引用C++14(n4140),14.7.3/10(强调

C++14 警告 : too many template headers for variable (should be 0)

在尝试最近的g++-5编译器时,我在一个文件中写了以下语句:templateTa;templateinta=1;结果:warning:toomanytemplateheadersfora(shouldbe0)同样有效,它并没有真正专门化a.例如templateTa;templateinta=1;intmain(){std::cout这个语法有什么奥秘? 最佳答案 模板参数只能在function模板的显式特化中被省略。你有一个变量模板,所以你必须包含:templateinta=1;引用C++14(n4140),14.7.3/10(强调

c++ - 如何协调将 header /源代码与模板分离的 C++ 习惯用法?

我有点想知道这个模板业务。在C和C++中,将声明放在头文件中并将定义放在源文件中是很常见的,并且将两者完全分开。然而,就模板而言,这似乎是不可能的(以任何好的方式),而且众所周知,模板是一个很棒的工具。此外,Boost主要是标题,所以这是一个真正的问题。在C++中分离header和源代码仍然是一个好主意,还是我不应该严重依赖模板? 最佳答案 实例化模板在编译时是昂贵的,但在运行时实际上是免费的。基本上,每次使用新模板类型时,编译器都必须为该新类型生成代码,这就是代码位于header中的原因,以便编译器稍后可以访问代码。将所有代码放在

c++ - 如何协调将 header /源代码与模板分离的 C++ 习惯用法?

我有点想知道这个模板业务。在C和C++中,将声明放在头文件中并将定义放在源文件中是很常见的,并且将两者完全分开。然而,就模板而言,这似乎是不可能的(以任何好的方式),而且众所周知,模板是一个很棒的工具。此外,Boost主要是标题,所以这是一个真正的问题。在C++中分离header和源代码仍然是一个好主意,还是我不应该严重依赖模板? 最佳答案 实例化模板在编译时是昂贵的,但在运行时实际上是免费的。基本上,每次使用新模板类型时,编译器都必须为该新类型生成代码,这就是代码位于header中的原因,以便编译器稍后可以访问代码。将所有代码放在

c++ - 如何仅在本地 header 上运行预处理器?

我希望预处理器读取本地头文件的包含,但忽略系统头文件的包含。换句话说,我如何让预处理器跳过以下形式的预处理指令:#includenew-line但仍然处理以下形式的指令:#include"q-char-sequence"new-line作为代码示例,请观察以下文件:#include//system#include"class_a.hpp"//local#include//system#include"class_b.hpp"//localintmain(){}我怎样才能得到预处理器的输出是:#includeclassA{};#includeclassB{};intmain(){}本地包