【发布时间】:2016-04-14 14:02:06
【问题描述】:
是否可以这样做:
template< typename T >
using T_CCUnit = static const constexpr T;
事实上,我只是想要static const constexpr 的别名,因为每次都写在某个文件中真的很无聊。
我更喜欢 c++11 中的解决方案。
【问题讨论】:
标签: c++ templates c++11 typedef
是否可以这样做:
template< typename T >
using T_CCUnit = static const constexpr T;
事实上,我只是想要static const constexpr 的别名,因为每次都写在某个文件中真的很无聊。
我更喜欢 c++11 中的解决方案。
【问题讨论】:
标签: c++ templates c++11 typedef
你可以很容易地为类型添加 const-ness,因为 cv-qualifiers 修改了类型:
template <typename T>
using T_C = std::add_const_t<T>;
但是,static 和 constexpr 修改的是声明,而不是类型。所以,这里:
int x1;
const int x2;
static const int x3;
static constexpr const int x4;
// | ^ | type |name
// ^ | constexpr specifier
// storage class specifier
最后三个声明都是const int类型,但x2与x3和x4有不同的存储类。
老实说,如果主要问题是那个
...写起来真的很无聊...
我最好的建议是你学习如何在你喜欢的编辑器中编写宏或保存常用代码 sn-ps。
【讨论】:
我认为对您来说最好的解决方案是为此使用宏。
#define STATIC_CONST_CONSTEXPR static const constexpr
但说真的,static 和 constexpr 不是该类型的修饰符。在您的情况下,您可以使用using 做的所有事情都是const T。您自己编写或要求预处理器为您编写的其他所有内容。
【讨论】:
static 存储限定符适用于实例,而不适用于类型。所以不可能typedef它。
【讨论】:
您不能 typedef static 或 constexpr - 两者都不是类型的一部分。也就是说,即使你可以,也没有人会知道:
T_CCUnit<int> x = 4;
意思是,但每个人都知道是什么:
static constexpr int x = 4;
的意思。值得每次输入额外的 7 个字符以使您的代码更清晰。你代码的所有读者,以及你未来的自己,都会感谢你。
旁注,const 与 constexpr 是多余的 - 每个声明为 constexpr 的变量都隐含地为 const。
【讨论】:
constexpr 说明符将对象声明为 const。" [dcl.constexpr]
constexpr。