class Widget
{
private:
int x{ 0 }; // fine, x's default value is 0
int y = 0; // also fine
int z(0); // error! 这会与函数声明冲突
};
这里的一个背景是C++11允许了类在声明的时候直接给Non-static Data Member复值。
而在C++98,你要这样做的话是需要限制为const static int,若你在C++98可以赋予给const static double等类型,那属于编译器扩展,而非C++标准。
参考资料