有两个类, class A { public: int data[10] }; 和 class B { public: vector data(10); }; 这里,A是合法的,而B就会发生编译错误。 将class B改为 class B { public: vector data; };这样才合法。 为什么A可以指定数组的大小,而B就不能指定vector的初始大小呢? 原因在于vector data(10)不是像数组那样,只是简单的指定了数组的大小。这里还对每个vector元素进行了初始化,也就是说vector data(10)是包含了执行语句的,这样自然不能放在类的定义中了。 如果一定要指定data的大小,我们可以使用构造函数的初始化列表,将B改为 class B { public: vector data; B(): data(10) { } }; 这样就达到目的了。