草庐IT

p_adts_header

全部标签

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(){}本地包

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(){}本地包

c++ - 如何在 C++ header 中声明数组?

这与其他一些问题有关,例如:this,以及我的其他一些问题。在thisquestion等,我们看到我们可以在一个不错的步骤中声明和初始化字符串数组,例如:constchar*constlist[]={"zip","zam","bam"};//fromotherquestion这可以在函数的实现中轻松完成,也可以在.cpp文件的主体中完成,在任何范围之外。我想要做的是将这样的数组作为我正在使用的类的成员,如下所示:classDataProvider:publicSomethingElse{constchar*constmStringData[]={"Name1","Name2","Nam

c++ - 如何在 C++ header 中声明数组?

这与其他一些问题有关,例如:this,以及我的其他一些问题。在thisquestion等,我们看到我们可以在一个不错的步骤中声明和初始化字符串数组,例如:constchar*constlist[]={"zip","zam","bam"};//fromotherquestion这可以在函数的实现中轻松完成,也可以在.cpp文件的主体中完成,在任何范围之外。我想要做的是将这样的数组作为我正在使用的类的成员,如下所示:classDataProvider:publicSomethingElse{constchar*constmStringData[]={"Name1","Name2","Nam

c++ - header 包含优化

有没有一种自动的方法来优化C++中头文件的包含,从而缩短编译时间?“自动”一词是指工具或程序。是否可以找到哪些头文件已过时(例如未使用公开的功能)?编辑:让每个包含标题“只包含一次”是一件重要的事情,但是有没有办法甚至更改文件的内容,以便经常使用的“功能”在特定包含上而不是更少经常使用的功能在其他包含上?我要求太多了吗?不幸的是,我们正在谈论一个包含数千个文件的现有代码库。它会是我实际要求的重构工具吗?谢谢。 最佳答案 更新我认为您真正想要的是“包含您使用的内容”,而不是一组最小的标题。IWYU表示尽可能前向声明,并包含直接声明您使