【发布时间】:2021-11-26 02:44:45
【问题描述】:
为什么constexpr static 数据成员需要在C++11、C++14 上的类之外定义,但在c++ 17、20 及更高版本上不需要这个要求?
struct Array{
int static constexpr sz_ = 5;
int ar_[sz_]{};
};
//int constexpr Array::sz_; // needed on `C++11`, `C++14` but not needed for C++17, C++20
void foo(int const& x){
}
int main(){
foo(Array::sz_);
}
- 那么这是标准的变化吗?还是我应该总是在类之外定义该成员?
【问题讨论】:
-
是的,它随着 C++17 的变化而改变(参见 Constant static members at en.cppreference.com/w/cpp/language/static)