6

これ

class X
{
 int x = 2;
 string y {"smt"};
 int tab[3] = {1,2,3}; // or tab[3] {1,2,3}
};

私の知る限り、新しい C++ 11 標準では可能です。ただし、これは Visual Studio 2012 V3 または 2013 では許可されていません。最初のものは次のようになります。

error C2864: 'A::a' : only static const integral data members can be initialized within a class

「;」に関する 2 番目と 3 番目のエラー と '{' 。

基本的に、これらの機能は MS コンパイラではまだ利用できないということですか? どのコンパイラが実際にそれをサポートしていますか? Visual でのクラス内初期化に関する回答を検索しましたが、最新バージョンに関する具体的な情報は見つかりませんでした。

前もって感謝します。

4

1 に答える 1

9

いいえ、非静的データ メンバー初期化子はMicrosoft コンパイラでサポートされていません。Herb Sutter は、Visual Studio 2013 RTM に実装されると発表しました。(リンク)

Sutter 氏は、C++11 機能の実装がこのように遅れている主な理由は、Microsoft が C++14 機能を同時に実装しようとしていることにあると述べました。したがって、おそらく、VS2013 リリースでもいくつかの C++14 機能が得られるでしょう。

その他の主要なコンパイラ:

  • GCCはそれをサポートしています (バージョン 4.8.1 以来、最初の完全な C++11 準拠コンパイラです)。
  • バージョン 3.0 以降の Clangをサポート
  • Intelはバージョン 14 以降をサポート
于 2013-08-29T19:09:11.720 に答える