【发布时间】:2017-01-16 17:03:00
【问题描述】:
我从一位我非常尊重的程序员那里发现了这样的代码:
class BigClass {
using MyId = uint32_t;
static constexpr MyId INVALID_ID() { return std::numeric_limits<MyId>::max();};
class SmallClass {
/* Constructor, etc. */
MyId id = INVALID_ID(); /* Default value */
};
};
将 INVALID_ID() 定义为函数而不是静态 const 变量有什么明显的优势吗?
static constexpr variable vs function 的问题与我的问题完全相同(我以uint32_t 为例,但我发现其他类型的问题也很有趣)。但是,我对这个问题的答案并不满意。在阅读了这里的一些答案后,我相信使用函数比易于模板化的能力更多。
【问题讨论】:
-
好吧,因为它不是静态成员变量,所以不需要在类之外定义。
-
@NathanOliver IIRC 静态常量在使用 ODR 之前不需要定义。
-
@Quentin Typo 已修复。他们可能会在这种情况下使用它。
-
“但是,我对这个问题的答案并不满意。” 那就要求澄清或向受骗者提出赏金。在这里获得令人满意的答案并将这个问题的早期变体留下“差”的答案是没有意义的。 (是的,我知道你还没有代表,你需要赚取一些。)
标签: c++ c++11 static constants