我最近开始在我的代码中使用更多的C++ 11功能,我一直想知道constexpr
关键字的位置是否与常量类型之前或之后不同.
风格1:
constexpr int FOO = 1; constexpr auto BAR = "bar";
风格2:
int constexpr FOO = 1; auto constexpr BAR = "bar";
样式2是我喜欢放置const
关键字的方式,constexpr
以相同的方式放置会给代码带来一些一致性.然而,这被认为是不好的做法,或者风格2还有其他问题,因为我并没有真正看到有人这样写.
这是一个符,如long
,short
,unsigned
,等它们都可以到处移动.例如,以下是两个等效且有效的声明:
int long const long unsigned constexpr foo = 5; constexpr const unsigned long long int foo = 5;
但按照惯例,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