我在我的代码中发布了一个问题,其唯一的#include指令如下:
#include <bits/stdc++.h>
Run Code Online (Sandbox Code Playgroud)
我的老师告诉我这样做,但在评论部分,我被告知我不应该这样做.
为什么?
c++ portability c++-faq turbo-c++ implementation-defined-behavior
我们的想法是通过只编写.cpp文件退出当前的.h/.cpp系统,然后在编译过程中生成模块文件,然后由其他.cpp文件使用.
这看起来非常棒.
但我的问题是:为什么他们从C++ 0x删除它?是因为太多的技术难题?时间不够?你是否认为他们会考虑使用它来获得一个不可思议的C++版本?
我正在阅读Herb Sutter More Exceptional C++和关于前瞻性声明的第37项说:
#include当前瞻声明足够时,永远不要头.宁愿#include只<iosfwd>当不需要流的完整定义.
另外,我听到很多关于仅包含编译单元所需的头以减少依赖性的建议.
我完全理解为什么这应该适用于项目标题,但我不太明白为什么包含不必要的标准标题是不好的.
例如,我做这样的事情:
//standard_library.h
#ifndef STANDARD_LIBRARY
#define STANDARD_LIBRARY
#include <iostream>
#include <chrono>
#include <thread>
...
// Everything I need in the project
#endif
Run Code Online (Sandbox Code Playgroud)
并在任何地方包含这个单一的标题,我需要的东西 std
我能想到的问题是:
但我没有遇到过1. sofar的重大问题.几乎所有东西都在std命名空间中.我也不完全理解为什么2.必然是一个重大问题.标准标题很少改变.另据我所知,编译器可以预编译它们.当涉及到模板时,它们只在我需要时才被实例化(编译).
还有一些好处:
我是一个没有大型项目经验的初学者,我真的很想弄明白,所以请怜悯我.
c++ ×3
c++-faq ×1
c++11 ×1
coding-style ×1
implementation-defined-behavior ×1
module ×1
portability ×1
standards ×1
turbo-c++ ×1