我习惯于使用枚举{my_const = 123; },因为在类中,使用静态constexpr需要类定义之外的一些代码(参见
this question).但是 – 在功能体中呢?最近我一直在注意到人们只是在他们的功能中使用了constexpr变量(甚至没有打扰他们),我想知道我是否是一个愚蠢的人,与我的时代背后
int foo(int x) { enum : int { bar = 456 }; return x + bar; }
所以,我的问题是:在函数体中使用枚举是否有任何好处,而不是使用constexpr变量?
解决方法
如果是constexpr int bar = 456,那么你可能会意外地或者有意的强制ODR存在bar,这是不可能的:int {bar = 456} ;.
这可能或可能不是双方的优势.
例如
int baz(int const* ptr ) { if (ptr) return 7; return -1; } int foo(int x) { // enum : int { bar = 456 }; constexpr int bar = 456; return x + baz(&bar); }
枚举版本不编译,constexpr int一个.一个constexpr int可以是一个左值,一个枚举器(列出的枚举常量之一)不能.
枚举值实际上不是int,而constexpr int实际上是一个int.如果你通过它,这可能很重要
template<class T> void test(T) { static_assert(std::is_same<T,int>::value); }
原文地址:https://www.jb51.cc/c/114289.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。