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"
}
語言標準只是談論發佈「診斷」。它不會說如果他們被稱爲警告或錯誤(或別的東西)。 –