BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース C++14の新機能に潜む互換性リスクは何か

C++14の新機能に潜む互換性リスクは何か

原文(投稿日:2014/06/02)へのリンク

C++11の後を継ぐ新C++標準であるC++14が,C++言語に多くの変化を引き起こしそうだ。バグフィックスや小さな改善を主体として,前バージョンにする拡張は小規模になるように計画されているのだが,その数少ない変更が原因となって,正しいC++11プログラムがC++14準拠コンパイラで動作しないという事態の発生は避けられそうにない。

新標準がもたらすであろう変更点全体については,Open StandardsのWebページで確認することができるが,さらに総合的な概要は別の場所にある

C++14という名称は2014年のリリースを示唆しているが,リリース日はまだ決まっていない。 実際には,同言語のワーキングドラフトであるN3936は,2014年3月2日にすでに公開されている。すべての国際機関の承認が受けられれば,C++14国際標準は今夏の終わりには公開される予定だ

新しい言語機能のサポートについても,主なC++コンパイラで進行中だ。“現行ドラフトを完全に実装している”Clangを筆頭に,GCCVisual StudioもC++14の新機能のいくつかのサポートを提供している。

新機能の大部分は,現行のC++11標準とのソース互換性を損なうことはない。例えば,ラムダ関数のパラメータをauto型指定で宣言可能にするジェネリックラムダの導入も,C++11のラムダとの互換性を失っていない。しかしながらいくつかの機能に関しては,何らかの問題を発生させる可能性が指摘されている。そのため,Steck OverflowのユーザであるFilip Roséen氏は,ワーキングドラフト自体から見つけ出すことのできる関連情報をすべて収集することにした

以下に示すのは,C++11との互換性を損なう可能性のある変更の簡単な一覧だ。

  • 桁区切り記号

    桁区切り記号が導入され,より読みやすい方法での数値リテラルを記述し,自然な方法で分割することが可能になった。

  • サイズを指定したメモリ解放

    C++14では,delete演算子のグローバルなオーバーロードが宣言可能になる。これはC++11では不可能だった,サイズを指定したメモリ解放に適している。

  • constexprメンバ関数が暗黙的にconstではなくなる

    C++14ではconstexprが大きく変更されているが,セマンティクスの面でC++11と異なっているのは,constexprとしてマークされたメンバ関数の定数性に関するものだ。

  • std::getsの削除

    std::getsは危険であるとして,標準ライブラリから取り除かれた。

より詳細な議論やコードサンプル,C++ドラフトへの参照については,Stack Overflowの記事を参照願いたい。

この記事に星をつける

おすすめ度
スタイル

BT