与其他机制相比较,看看一组C++代码,其中包括无处不在的其他语言,如C语言,其中递归递归地声明。@ FVU:与更现代设计语言相比,预处理器的包含机制相当缓慢。请看下面我的结果。除非你是在网络上编译文件或者其他类似的东西,大大增加了“打开并读取文件”的时间,

与其他机制相比较,看看一组C++代码,其中包括无处不在的其他语言,如C语言,其中递归递归地声明。@ FVU:与更现代设计语言相比,预处理器的包含机制相当缓慢。请看下面我的结果。除非你是在网络上编译文件或者其他类似的东西,大大增加了“打开并读取文件”的时间,,c++,compilation,C++,Compilation,与其他机制相比较,看看一组C++代码,其中包括无处不在的其他语言,如C语言,其中递归递归地声明。@ FVU:与更现代设计语言相比,预处理器的包含机制相当缓慢。请看下面我的结果。除非你是在网络上编译文件或者其他类似的东西,大大增加了“打开并读取文件”的时间,否则差别很小——如果我不能测量30多个文件,每个文件都包含一次assert.h或cassert,“非常慢”?想把那句话量化一下吗?但我同意您不应该包含不必要的标题。@fvu只需尝试包含Boost库的几个标题,然后自己查看;)相对于其他机制来说,


与其他机制相比较,看看一组C++代码,其中包括无处不在的其他语言,如C语言,其中递归递归地声明。@ FVU:与更现代设计语言相比,预处理器的包含机制相当缓慢。请看下面我的结果。除非你是在网络上编译文件或者其他类似的东西,大大增加了“打开并读取文件”的时间,否则差别很小——如果我不能测量30多个文件,每个文件都包含一次assert.h或cassert,“非常慢”?想把那句话量化一下吗?但我同意您不应该包含不必要的标题。@fvu只需尝试包含Boost库的几个标题,然后自己查看;)相对于其他机制来说,它是慢的,看看一组C++代码,它必须包括无处不在的其他语言,比如C语言,其中递归递归地声明。@ FVU:与更现代设计的语言相比,预处理器的包含机制是相当慢的。请看下面我的结果。除非您是通过网络或其他类似的方式编译文件,从而大大增加了“打开并读取文件”的时间,这是非常小的区别——如果我不能测量30多个文件,每个文件都包含一次assert.h或cassert。当然这个逻辑应该驻留在
assert.h
中,因为它本身是正确的吗?@GManNickG引用了GCC assert.h“我们应该能够多次包含此文件,以允许为代码的不同部分启用/禁用assert宏。因此,不要添加头保护。”。所以……是的,它不应该。为了自身的正确性,这个逻辑应该驻留在
assert.h
中?@GManNickG引用GCC assert.h“我们应该能够多次包含这个文件,以允许为代码的不同部分启用/禁用assert宏。所以不要添加标题保护。”。所以……是的,它不应该。我很欣赏你的工作,但没有理解你的观点。你是说包含
assert.h
,每个文件需要多0.003秒?(0.1/30大约是0.003)是的,给或拿毫秒或到。这是本地文件。显然,如果文件远程保存在某个服务器上,那么这将增加编译时间。但是对于“真正”的编译,这真的没有什么区别,因为编译器花了很多时间“思考”“关于生成什么代码,并且没有太多时间阅读文件。我很欣赏你的工作,但没有理解你的观点。您的意思是说包含
assert.h
,每个文件需要多0.003秒?(0.1/30约为0.003)是的,给或拿一毫秒或到。这是本地文件。显然,如果文件远程保存在某个服务器上,那么这将增加编译时间。但是对于一个“真正的”编译来说,这并没有什么区别,因为编译器花了很多时间“思考”生成什么代码,而不是花很多时间阅读文件。
#pragma once

#include <assert.h>

/// A vector in a 3D space with 3 components: x, y, and z.
class Vector3D
{
public:
    Vector3D(float x = 0, float y = 0, float z = 0)
    {
        m_component[0] = x;
        m_component[1] = y;
        m_component[2] = z;
    }

    float x() const    {return m_component[0];}
    float y() const    {return m_component[1];}
    float z() const    {return m_component[2];}

    void setX(float x)    {m_component[0] = x;}
    void setY(float y)    {m_component[1] = y;}
    void setZ(float z)    {m_component[2] = z;}

    float component(int i) const
    {
        assert(i >= 0 && i < 3);
        return m_component[i];
    }

    float& component(int i)
    {
        assert(i >= 0 && i < 3);
        return m_component[i];
    }

private:
    float m_component[3];
};
#ifdef USE_ASSERT
# include <assert.h>
# define ASSERT(statement) assert(statement)
#else
# define ASSERT(statement)
#endif
 #ifndef AssertIncluded
 #define AssertIncluded
 #include "assert.h"
 #endif
7.722s      7.730s      7.660s
7.734s      7.652s      7.676s