-
总览
-
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 有些事情,编译阶段就可以帮你做了
最新推荐文章于 2024-02-18 21:16:50 发布