【发布时间】:2019-08-06 02:11:45
【问题描述】:
很明显,声明为static 的类的数据成员在ctor 初始化程序列表中被初始化是不正确的(因为它“不是对象的成员”)。但如果它是protected 成员,它就可以正常工作。为什么?
// foo.h
class Foo {
public:
explicit Foo();
~Foo() = default;
protected:
static int kProtected;
private:
static int kPrivate;
}
// foo.cpp
Foo::Foo()
: kProtected(1), // OK (?!)
kPrivate(1) {} // error C2438: 'kPrivate': cannot initialize static class data via constructor
【问题讨论】:
-
我在 MSVC v19 上遇到了 2 个错误:godbolt.org/z/AXorG-
-
你用的是什么版本的visual studio?
标签: c++ visual-studio initializer-list