4
#include <atomic>
std::atomic<int> outside(1);
class A{
  std::atomic<int> inside(1);  // <--- why not allowed ?
};

エラー

prog.cpp:4:25: error: expected identifier before numeric constant
prog.cpp:4:25: error: expected ',' or '...' before numeric constant

VS11では

C2059: syntax error : 'constant'
4

1 に答える 1

8

クラス内初期化子は、初期化の構文をサポートしていません。これは(e)、初期化を設計した委員会のメンバーが潜在的なあいまいさを心配しているためです(たとえば、よく知られているT t(X());宣言はあいまいで、初期化を指定しませんが、名前のないパラメーターを使用して関数を宣言します)。

あなたは言うことができます

class A{
    std::atomic<int> inside{1};
};

または、デフォルト値をコンストラクターに渡すこともできます

class A {
  A():inside(1) {}
  std::atomic<int> inside;
};
于 2012-09-09T12:31:59.897 に答える