C++ primer 上面的一個例子: // constRef.cpp : 定義控制台應用程序的入口點。 // #include "stdafx.h" class constRef { public: constRef(int ii); int i; const int ci; int &ri; }; constRef::constRef(int ii) { i=ii; ci=ii; ri=i; } //constRef::constRef(int ii):i(ii),ci(i),ri(ii){} int _tmain(int argc, _TCHAR* argv[]) { constRef B(5); printf("%d,%d,%d",B.i,B.ci,B.ri); return 0; } 這樣寫是有錯誤的,error C2758: “constRef::ci”: 必須在構造函數基/成員初始值設定項列表中初始化; constRef::ri”: 必須在構造函數基/成員初始值設定項列表中初始化; error C2166: 左值指定 const 對象; 而將 constRef::constRef(int ii) { i=ii; ci=ii; ri=i; } 使用constRef::constRef(int ii):i(ii),ci(i),ri(ii){} 替換 就正確了,你知道原因嗎? 記住:可以初始化const對象或引用類型的對象,但不能對他們賦值。在開始執行構造函數的函數體之前,必須完成初始化。初始化const或引用類型數據成員的唯一機會是在構造函數初始化列表中。