- constexpr
constexpr
是 C++11 引入的关键字,用于声明可以在编译时求值的常量表达式。constexpr
函数可以在编译时被计算,从而可以提高程序的性能并允许进行一些在运行时无法完成的优化。
在 C++ 中,constexpr
可以用于以下两种情况:
constexpr
变量 :用于声明变量为编译时常量。在声明中使用constexpr
关键字,编译器会确保这个变量在编译时就能够确定其值。
cpp
constexpr int size = 10;
constexpr double pi = 3.14159;
constexpr
函数 :用于声明函数为编译时求值的常量表达式函数。constexpr
函数的返回值和参数必须是字面值类型,并且函数体中只能包含一些特定的语句,比如赋值语句和条件语句等。
cpp
constexpr int square(int x) {
return x * x;
}
可以在编译时调用 constexpr
函数,并将结果用于编译期常量,例如:
cpp
constexpr int result = square(5); // 在编译时计算出结果为 25
constexpr
的使用可以帮助提高代码的性能和可读性,因为它允许在编译时进行计算,避免了在运行时进行一些不必要的计算。在 C++11 及以后的版本中,推荐尽可能地使用 constexpr
来声明常量和函数,以便让编译器在编译时做更多的优化工作。
- decltype
decltype
是 C++11 引入的关键字,用于获取表达式的类型或者变量的类型。它可以在编译时获取表达式或变量的类型,而不需要实际进行表达式的计算或变量的初始化。
decltype
的基本语法如下:
cpp
decltype(expression)
//或
decltype(variable)
其中,expression
是一个表达式,variable
是一个变量。decltype
关键字会返回表达式或变量的类型。decltype
的使用可以帮助我们在编写模板代码时,根据输入的表达式或变量来推断类型,从而实现更加灵活的编程。
下面是一些 decltype
的示例用法:
cpp
int x = 5;
decltype(x) y; // 定义变量 y 的类型为 int
std::vector<int> v = {1, 2, 3};
decltype(v.size()) size = v.size(); // 获取 v.size() 的返回类型,通常为 size_t
auto add(int a, int b) -> decltype(a + b) // 定义函数返回类型为 a + b 的类型
{
return a + b;
}
在上面的示例中,decltype
分别用于获取变量 x
的类型、获取 v.size()
的返回类型以及定义函数的返回类型。通过 decltype
,我们可以根据表达式或变量来推断出类型,使得代码更加灵活和通用。
总的来说,decltype
是一个非常有用的关键字,可以在编译时获取表达式或变量的类型,为模板编程和泛型编程提供了更多的灵活性。