代码之家  ›  专栏  ›  技术社区  ›  Carpetfizz

带常量指针的向量构造函数示例

c++
  •  1
  • Carpetfizz  · 技术社区  · 6 年前

    我在看书 this

    template<typename T> 
    class Vec3 
    { 
    public: 
        // 3 most basic ways of initializing a vector
        Vec3() : x(T(0)), y(T(0)), z(T(0)) {} 
        Vec3(const T &xx) : x(xx), y(xx), z(xx) {} 
        Vec3(T xx, T yy, T zz) : x(xx), y(yy), z(zz) {} 
        T x, y, z; 
    }; 
    
    typedef Vec3<float> Vec3f; 
    
    Vec3<float> a; 
    Vec3f b; 
    

    我知道每个构造函数都在使用成员初始值设定项列表。

    1. 默认构造函数初始化 x , y ,和 z 作为 0 类型 T

    2. ?

    3. 构造函数接受 , ,和 z轴 明确并相应地初始化成员变量。

    我不知道是什么2。试图说明,或者我将如何使用它。做什么 const T &xx xx 是指向某个类型的变量的指针 T型 const 是指指针本身还是指向的变量?此外,初始化的目的是什么 是的 z轴 用同样的变量?

    1 回复  |  直到 6 年前
        1
  •  3
  •   Thomas    6 年前

    const T &xx 是一个参考( & )给一个 const T

    通过使用引用而不是简单地传递 T xx ,可以避免可能昂贵的副本,以防 T 是一种复杂的类型。(在这种情况下可能是过早的优化,因为 Vec3 将仅用以下类型实例化 float double

    通过引用 const T型 ,呼叫者可以确定 构造函数不会修改它们传入。此外,调用者将能够传递已经 常量 ,例如文字(例如。 Vec3<double>(1.0) ).

    常量 它总是指 先于 它。所以 int const *x 意思是 x 是指向 常量 int *const x 意思是 是一个 指向(可变)的指针 int int const *const x 也有可能。

    但是如果 常量 是该类型中的第一个标记,因此它前面没有任何标记?然后它“跳过一个”,所以 常量T&xx T const &xx

    如果要将向量设置为 (1, 1, 1) ,例如。数学意义可疑,但有时有用。例如,通过乘以向量 (x, y, z) 通过 (1,1,1)