-
总览
-
constexpr修饰的变量-
核心
-
编译时明确的好处
-
编译器使用场景
int main() { const int x = 5; int s[x]; }#include <array> int main() { constexpr int len = sizeof(int); std::array<int,len> a; }#include <array> int main() { constexpr int len = sizeof(int); enum class T { START=len, MID, END }; }#include <array> constexpr int len = sizeof(int); struct alignas(len) T { char s[10]; int a; }; int main() { T a; } -
const
-
-
constexpr修饰的函数-
核心
-
技巧
-
B内存总是A内存的平方#include<array> constexpr int getSize(int n) { return n * n; } int main() { constexpr int len = 10; std::array<int,len> a; std::array<int,getSize(len)> b; } -
c++11和c++14对constexpr函数的限制 -
C++11#include<array> template<typename T> void show(T&& t){ t.error(); } constexpr int getSize(int n) { return n ? getSize(n-1) + n : 0; } int main() { constexpr int len = 5; std::array<int,len> a; std::array<int,getSize(len)> b; show(b); } -
C++14允许较复杂的函数#include<array> template<typename T> void show(T&& t){ t.error(); } constexpr int getSize(int n) { int sum = 0; for(int i = 0 ; i <= n ; i++ ) { sum+=i; } return sum; } int main() { constexpr int len = 5; std::array<int,len> a; std::array<int,getSize(len)> b; show(b); } -
提醒
-
C++14加强 -
C++14修饰类成员函数#include<array> template<typename T> void show(T&& t){ t.error(); } class T { public: constexpr int getSize(int n) { int sum = 0; for(int i = 0 ; i <= n ; i++ ) { sum+=i; } return sum; } }; int main() { constexpr int len = 5; std::array<int,len> a; std::array<int,T().getSize(len)> b; show(b); }#include<array> template<typename T> void show(T&& t){ t.error(); } class T { public: constexpr T(int a,int b):a(a),b(b){} constexpr int getSize(int n) { return a * b * n; } private: int a; int b; }; int main() { constexpr int len = 5; std::array<int,len> a; std::array<int,T(2,3).getSize(len)> b; show(b); } -
对象
constexpr#include<array> template<typename T> void show(T&& t){ t.error(); } class T { public: constexpr T(int a,int b):a(a),b(b){} constexpr int getSize(int n) const noexcept { return a * b * n; } private: int a; int b; }; int main() { constexpr int len = 5; constexpr T t{2,3}; std::array<int,len> a; std::array<int,t.getSize(len)> b; show(b); } -
注意
-
-
总结
C++11 constexpr 有些事情,编译阶段就可以帮你做了
最新推荐文章于 2025-07-08 22:19:24 发布
constexpr用于声明在编译时可计算的变量和函数,增强常量表达式的能力。它使得变量在链接前就能确定值,优化存储,适用于只读区和模板参数。constexpr函数在全 constexpr 参数时能在编译时计算,否则按普通函数处理。C++11和C++14逐步放宽了对constexpr函数的限制,允许更复杂的表达式和成员函数。在类中,constexpr成员函数和构造函数能帮助预计算值。使用constexpr可以提升代码灵活性,但可能导致编译错误。建议尽可能使用constexpr以利用编译时计算的优势。
972

被折叠的 条评论
为什么被折叠?



