3
下面的代码发出此警告,但它似乎工作正常,因为A :: st和B :: st都被初始化并且实际上表示相同的字符串。根据我的理解,这是错误的代码,它不应该编译(我检查铛)。我想知道为什么VC++不会发出错误而不是警告?VC++警告C4356:静态数据成员无法通过派生类初始化
#include <string>
#include <iostream>
class A
{
public:
static const std::string st;
};
class B : public A
{
};
const std::string B::st = "abcd"; //warning C4356: 'A::st': static data member cannot be initialized via derived class
int main()
{
std::cout << A::st << std::endl; // outputs "abcd"
std::cout << B::st << std::endl; // outputs "abcd"
}
语言标准只是谈论发布“诊断”。它不会说如果他们被称为警告或错误(或别的东西)。 –