Ant*_*ivi 9 c++ constexpr c++11
我最近开始在我的代码中使用更多的C++ 11功能,我一直想知道constexpr关键字的位置是否与常量类型之前或之后不同.
风格1:
constexpr int FOO = 1;
constexpr auto BAR = "bar";
Run Code Online (Sandbox Code Playgroud)
风格2:
int constexpr FOO = 1;
auto constexpr BAR = "bar";
Run Code Online (Sandbox Code Playgroud)
样式2是我喜欢放置const关键字的方式,constexpr以相同的方式放置会给代码带来一些一致性.然而,这被认为是不好的做法,或者风格2还有其他问题,因为我并没有真正看到有人这样写.
chr*_*ris 10
这是一个符,如long,short,unsigned,等它们都可以到处移动.例如,以下是两个等效且有效的声明:
int long const long unsigned constexpr foo = 5;
constexpr const unsigned long long int foo = 5;
Run Code Online (Sandbox Code Playgroud)
但按照惯例,constexpr会出现在类型名称之前.如果你把它放在后面,它会让别人感到困惑,但它在技术上是有效的.由于constexpr服务的目的不同const,我认为将它放在右边并没有同样的好处.例如,你做不到int constexpr * constexpr foo.事实上,int constexpr * foo不允许你重新分配foo,而不是应用于什么foo指向,所以如果你期望同样的语义,将它放在右边可能会产生误导const.
总结一下:
int constexpr foo = 0; // valid
int constexpr * constexpr foo = nullptr; // invalid
int* constexpr foo = nullptr; // invalid
int constexpr * foo = nullptr; // valid
constexpr int* foo = nullptr; // valid and same as previous
Run Code Online (Sandbox Code Playgroud)