c++ - 带有 const 指针的 vector 构造函数示例

标签 c++

我正在阅读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 ,和z0类型 T

  2. 构造函数接受 x , y ,和z显式性并相应地初始化成员变量。

我不确定 2. 试图说明什么,或者我将如何使用它。 const T &xx 是什么意思?确切的意思是?我明白了xx是指向 T 类型的某个变量的指针,但是是 const引用指针本身还是它指向的变量?此外,初始化x有什么意义? , y ,和z使用相同的变量?

最佳答案

const T &xx是对 & 的引用 ( const T ) .

通过使用引用而不是简单地传递 T xx ,可以避免潜在昂贵的拷贝,以防万一 T是一个复杂类型。 (在这种情况下可能是过早的优化,因为典型的 Vec3 只会用 floatdouble 等类型实例化,但编译器无论如何都会优化它。)

通过使其成为对 const 的引用 T ,调用者可以确定T它们传入的不会被构造函数修改。此外,调用者将能够传递已经是 const 的值。 ,如文字(例如 Vec3<double>(1.0) )。

const 的规则is:它总是指它之前的事物。所以int const *x意味着x是一个指向 const 的(可变)指针int,而int *const x意味着xconst指向(可变)的指针 intint const *const x也是可以的。

但是如果 const 又会怎样呢?是类型中的第一个标记,所以它前面没有任何内容?然后它“跳过一个”,所以 const T &xxT const &xx 相同。为了保持一致性,我更喜欢写后者,但很多人使用前者,因为从左到右读起来更自然。

如果您希望将 vector 设置为(1, 1, 1),则此构造函数将很有用。 , 例如。数学意义值得怀疑,但有时很有用。例如,通过乘以 vector (x, y, z)通过(1, 1, 1)我们可以很容易地计算出前一个 vector 的分量之和。

关于c++ - 带有 const 指针的 vector 构造函数示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51936650/

相关文章:

c++ - delete[] 如何跟踪元素的数量?

c++ - 如何获取CTreeCtrl中选中项的文件类型?文件扩展名可能被隐藏,因此 GetItemText 没有帮助

c++ - STL 如何使用非线性数据结构实现反向迭代器取消引用?

c++ - Clang 3.1 和用户定义的文字

c++ - 结构初始化时缩小转换

c++ - Boost 安装和库路径

c++ - openCV 将 IplImage 与 cv::Mat 混合

c++ - 创建一个反射(reflect)崩溃原因的崩溃报告 Win32 C++ 字符串的好方法是什么?

c++ - 编写一个程序,要求用户最多输入 10 个整数(可能更少);使用数组和 for 循环

C++标准方式创建 "Abstract Class"(纯虚类)