【发布时间】:2018-11-06 01:02:19
【问题描述】:
为什么emplace_back 引用需要定义的成员? emplace_back(integer literal)和emplace_back(static constexpr integer member)有什么区别?
如果我切换到 C++17,它编译得很好。我发现在 C++17 中,静态 constexpr 数据成员隐式为 inlined。这是否意味着编译器会为它们隐式创建定义?
示例代码:
class base {
int n;
public:
base(int n):n(n) {}
};
struct base_trait {
static constexpr int n = 1;
};
int main(void) {
vector<base> v;
v.emplace_back(1); // ok
v.emplace_back(base_trait::n); // link error with -std=c++14, ok with -std=c++17
return 0;
}
【问题讨论】:
标签: c++ language-lawyer c++17 constexpr one-definition-rule