C++ 知识点.01

C++ 知识点

const 作用

1
2
// 表示这个函数不会修改成员变量的值
vec3 get_direction() const;

智能指针

  • 智能指针:shared_ptr
    • 自动释放内存
1
2
3
shared_ptr<double> double_ptr = make_shared<double>(0.37);
shared_ptr<vec3> vec3_ptr = make_shared<vec3>(1.414214, 2.718281, 1.618034);
shared_ptr<sphere> sphere_ptr = make_shared<sphere>(point3(0,0,0), 1.0);

auto

1
auto double_ptr = make_shared<double>(0.37);

随机数

1
2
3
4
5
6
7
8
9
10
#include <random>
// #include <cstdlib>

// 返回一个随机数 [0, 1)
inline double random_double() {
static std::uniform_real_distribution<double> distribution(0.0, 1.0);
static std::mt19937 generator;
return distribution(generator);
// return rand() / (RAND_MAX + 1.0);
}

cmake

static

  • 类的 static 成员函数
    • 在另外文件中实现的时候不需要添加 static
      • 如果类外定义函数时在函数名前加了 static,因为作用域的限制,就只能在当前文件里用
      • 产生歧义

inline + static

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// vec3.hpp
#pragma once
class vec3 {
public:
static vec3 random_in_unit_sphere();
};

// vec3.cpp
#include "vec3.hpp"
vec3 vec3::random_in_unit_sphere() { return vec3(); }

// main.cpp
#include <iostream>
#include "vec3.hpp"
int main() {
vec3 v;
v.random_in_unit_sphere();
return 0;
}

修改

  • 修改 vec3.cppvec3.hpp 的声明和定义
  • 错误1
1
2
3
4
5
6
7
In file included from main.cpp:3:
vec3.hpp:5:18: warning: inline function ‘vec3 vec3::random_in_unit_sphere()’ used but never defined
5 | inline vec3 random_in_unit_sphere();
| ^~~~~~~~~~~~~~~~~~~~~
/usr/bin/ld: /tmp/cceorNNS.o: in function `main':
main.cpp:(.text+0x23): undefined reference to `vec3::random_in_unit_sphere()'
collect2: error: ld returned 1 exit status
  • 错误2
1
2
3
/usr/bin/ld: /tmp/cceorNNS.o: in function `main':
main.cpp:(.text+0x23): undefined reference to `vec3::random_in_unit_sphere()'
collect2: error: ld returned 1 exit status
vec3.hpp vec3.cpp result
static OK
inline static 错误 1
static inline 错误 2
inline static inline 错误 1
OK
inline 错误 1
inline 错误 2
inline inline 错误 1
  • inline 函数一般在头文件中声明并定义

默认参数

  • 函数默认参数声明的时候给定