cpp17对constexpr的限制
时间: 2023-09-03 10:26:28 浏览: 158
### 回答1:
Cpp17对constexpr的限制主要有以下几个方面:
1. 函数体内只能有一个return语句
2. constexpr函数不能虚函数
3. constexpr函数不能有try-catch语句
4. constexpr函数内不能调用非constexpr函数
5. constexpr变量的值必须在编译期间能够确定。
请注意,以上限制只适用于Cpp17标准中constexpr的实现。不同的C++标准中constexpr会有不同的限制。
### 回答2:
C++17对constexpr的限制有以下几点:
1. constexpr函数必须是简单的计算型函数:C++17限制了constexpr函数的内容,要求函数只能包含简单的表达式、控制流语句和其他constexpr函数的调用。这意味着在constexpr函数中不能使用诸如动态内存分配、文件I/O、虚函数等复杂的操作。
2. constexpr变量必须具有常量表达式初始化器:C++17要求constexpr变量必须在声明时就被初始化,且初始化表达式必须是常量表达式。常量表达式是指编译期就能计算出结果的表达式,而不能依赖于运行时的计算。
3. 对constexpr函数求值的限制:C++17对于constexpr函数的求值也有一些限制。constexpr函数可以在编译时被求值,但不强制要求编译器在编译期间执行constexpr函数的求值。编译器可以选择在运行时延迟求值,只有在需要的时候才求值。
总的来说,C++17对constexpr的限制主要是为了确保constexpr函数和变量在编译期间能够被求值,且其初值的计算是确定的、不依赖于运行时的。这样可以使得constexpr能够在更多的场景下使用,并为编译期优化和静态检查提供了更大的可能性。
阅读全文