C++11中的const和constexpr

const

  • const 是C++中的关键字,用于声明常量。使用const修饰的变量在其生命周期内不可修改。
  • const 可以应用于变量、函数参数、函数返回值等。
  • const 变量必须在声明时进行初始化,并且初始化后不能修改其值。
  • const 变量可以通过引用或指针进行访问,但不能通过引用或指针修改其值。

const int MAX_VALUE = 100;
const int* ptr = &MAX_VALUE;
int const* constPtr = &MAX_VALUE;

constexpr

  • constexpr 是C++11引入的关键字,用于声明常量表达式。常量表达式是在编译时求值的表达式。
  • constexpr 可以应用于变量、函数、构造函数等。
  • constexpr 变量必须在声明时进行初始化,并且初始化表达式必须是常量表达式。
  • constexpr 函数是指在编译时可以求值的函数。它的参数和返回值类型都必须是字面值类型,并且函数体必须是单个返回语句。
  • 在C++14之前,constexpr 函数的函数体只能包含简单的控制流语句(如iffor),不能包含复杂的逻辑。
  • 在C++14中,constexpr 函数的函数体可以包含更多的控制流语句和局部变量的声明。
constexpr int square(int x) {
    return x * x;
}

constexpr int MAX_VALUE = square(5);

const的优点:

  • 提供了对常量的定义和使用,可以用于声明不可变的变量和函数参数,增加程序的可读性和可维护性。
  • 通过使用const关键字,可以防止对变量的意外修改,提高代码的健壮性。
  • const变量可以被编译器用于优化,例如在编译时进行常量折叠。

const的缺点:

  • const变量必须在声明时进行初始化,且初始化后不能修改其值,限制了其灵活性。
  • 在多个编译单元中使用const变量时,可能引发重复定义的链接错误。
  • const限制了对变量的修改,但并不保证线程安全。

constexpr的优点:

  • constexpr关键字可以用于声明常量表达式,这些表达式在编译时就可以求值,可以提供更高的性能和效率。
  • constexpr函数可以用于在编译时计算值,可以用于替代宏和模板元编程,提供更安全和更易读的代码。
  • 在C++14中,constexpr函数的功能得到了扩展,可以包含更复杂的控制流和局部变量。

constexpr的缺点:

  • 在C++11之前,constexpr函数的功能受到了一些限制,函数体只能包含简单的控制流语句,限制了其灵活性。
  • 在C++11中,constexpr变量的初始化表达式必须是常量表达式,这可能限制了某些复杂初始化的场景。
  • constexpr关键字的语义和使用方式相对较为复杂,需要开发人员对其规则有深入的理解。

你可能感兴趣的:(C++,笔记,c++,开发语言,学习,笔记)