1. static
首先使用static的主要目的是控制存储周期, 链接性 和可见性
可以作为 1. 局部变量 2.类成员 3. 全局变量和函数
2. const
const 关键字用于声明一个变量为常量, 一旦初始化之后,它的值就不会被改变 。
2.1 常量表达式
声明为const的变量必须在编译时就已知, 并且不能被修改
2.2 类型修饰符 :
与static 不同的是, const可以作为类型修饰符,表示变量或者对象的状态不可以修改, 例如, const int 表示一个不可变的整型常量, const int* 表示一个指向整型常量的指针(是指 指针指向的值不可以变 , 但是指针本省可以变) 。
2.3 成员函数
在类的成员函数后使用const 关键字表示该成员函数不会修改对象的状态, 这中类函数可以称为(访问器或者只读函数)
如代码:
Eigen::MatrixXd SolveQPClosedForm(
int order,
const Eigen::MatrixXd &Path,
const Eigen::MatrixXd &Vel,
const Eigen::MatrixXd &Acc,
const Eigen::VectorXd &Time);
//const Eigen::MatrixXd &Acc 常量引用,这意味着可以访问,但是不能修改它的值
3. const的作用
- 声明一个局部或者全局变脸那个为 常量
- 修饰函数的参数, 表示在函数提内部不能修改该参数的值
- 修改函数的返回值
3.1. 如果给用const修饰的返回值的类型为指针 , 那么函数的返回值(即指针)的内容是不能被修改的 而且这个返回值只能赋值给被const 修饰的指针 就比如
const char getstring() ;
char *str = getdtring() ; //这是不对的,因为str没有被const修饰 正确的应该是:
const char * str = getstring() ;
3.2 如果用const修饰的普通返回值,如 返回int 变量, 由于这个返回值是一个临时的变量, 在函数调用后也结束了这个临时变量的生命周期, 因此把这些返回值使用cost修饰是没有意义的。
4. 节省空间,避免不必要的内存分配
#define PI 3.1415926 ; //该宏用来定义常量
const double pi = 3.1415926 ; //此时并未将pi放入只读容器中
double i = pi ; //此时pi分配内存, 此后不在分配
double I = PI ;//编译期期间进行内存分配
double J = pi ; //没有内存分配再次进行宏替换,有一次分配内存