raytracing

在 C++ 中,冒号(:)用于初始化类的成员变量或调用父类的构造函数。这种语法称为成员初始化列表(member initialization list),它允许在构造函数体执行之前对成员变量进行初始化。

在这里,vec3() : e{0,0,0} {} 中的冒号后面就是成员初始化列表。: e{0,0,0} 表示对类的成员变量 e 进行初始化,其中 {0,0,0} 是对数组 e 的初始化值。

txt
double& operator[](int i) { return e[i]; }

double&:

  • 返回类型是 double&,即返回一个 double 类型的左值引用。
  • 左值引用允许函数返回一个可修改的元素,这样调用者可以直接修改这个元素。

左值和右值的定义

  • 左值(lvalue): 可以取地址的值,通常表示内存中的一个位置。例如,变量、数组元素、对象成员等都是左值。
  • 右值(rvalue): 不存在明确地址的临时值,通常是表达式的结果或者字面量。例如,字面量、临时对象、运算结果等。

引用和原变量本质上是同一个东西,对引用的修改就是对原变量的修改

double& 表示引用

inline 关键字在C++中用于建议编译器将某个函数的代码在每次调用时直接插入到调用处,而不是进行常规的函数调用。从而可以减少函数调用的开销,尤其是当函数体非常小、调用频繁时,这种优化可能会带来性能提升。

using color = vec3; 这行代码是一个类型别名(type alias)的定义,将 vec3 类型重命名为 color 类型。也就是说,使用 color 关键字可以代替 vec3 类型的使用。