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++标准。 参考资料