共用方式為


編譯階段重大變更摘要

更新:2007 年 11 月

本主題將針對 Visual C++ 2003 之前編譯時沒有問題的程式碼,摘要列出現在編譯時期會發生的錯誤和警告。但是,某些與一致性有關的編譯時期重大變更則是在 Visual C++ 2005 中就已經加入。

  • 現在,已定義的前置處理器指示詞 (Preprocessor Directive) 都需要使用右括號 (C2004)。

  • 若缺少 typename 關鍵字和明確特製化,則無法再找到主要樣板的樣板參數 (C2146)。

  • 您只能透過類別 (B) 的成員函式存取受保護成員 (n),這個類別 (B) 是繼承自類別 (A),而此受保護成員 (n) 則是其中的成員 (C2247)。

  • 已改善編譯器中的網頁可及性檢查,現在已經可以偵測到無法存取的基底類別 (Base Class) (C2247)。

  • 明確特製化不能是複製建構函式或複製指派運算子 (C2299)。

  • 如果無法存取解構函式和 (或) 複製建構函式,則無法攔截例外狀況 (C2316)。

  • 不再允許函式的指標使用預設引數 (C2383)。

  • 無法透過衍生類別初始化靜態資料成員 (C2477)。

  • 標準並不允許 typedef 的初始設定,因此現在會產生編譯器錯誤 (C2513)。

  • bool 現在是正確的型別 (C2632)。

  • UDC 搭配多載運算子 (Overload Operator) 現在會造成模稜兩可 (Ambiguity) (C2666)。

  • 限定性條件轉換與自身轉換不同 (C2666)。

  • 現在已將更多運算式視為有效的 null 指標常數 (C2668)。

  • 對於之前編譯器會推斷 template<> 的地方,現在這些地方都必須使用它 (C2768)。

  • 如果成員 (Member) 函式已透過樣板類別特製化進行明確特製化,則該類別外成員函式的明確特製化即為無效 (C2910)。

  • 對於每個明確特製化,您都必須選擇每個明確特製化的參數,如此這些參數才能符合主要樣板的參數 (C2912)。

  • 不再允許使用浮點非型別樣板參數 (C2993)。

  • 不允許將類別樣板視為樣板型別引數 (C3206)。

  • friend 函式名稱已不能在其包含的命名空間中使用 (C3767)。

  • 已提高成員指標的一致性 (C3867)。

  • 編譯器將不再接受在巨集中使用額外逗號 (C4002)。

  • 使用形式為 () 的初始設定式所建構之 POD 型別的物件將會使用預設值初始化 (C4345)。

  • 現在如果要將相依名稱當成型別,則必須使用 typename (C4346)。

  • 之前視為樣板特製化的函式已不再是如此 (C4347)。

  • 無法透過衍生類別初始化靜態資料成員 (C4356)。

  • 在傳回型別中使用類別樣板特製化之前,必須先定義此類別樣板特製化 (C4686)。

  • 現在編譯器會報告不可能執行到的程式碼 (C4702)。

  • 宣告新的非樣板函式的 friend 宣告必須加以定義 (LNK2019)。

請參閱

參考

Visual C++ 編譯器的重大變更