FAQ
QA・C/QA・C++
QA·C/QA·C++に関する
ID.9
Q. 「常に直接初期化を使用する(-audi+)」オプションの設定基準を教えてください。 QAC++2.1J以上
A.
コンパイラの中には、'T x = e;'という形式でクラスを 宣言した場合に、'T x(e);' と記述されたものと見なして 初期化するものと、'T x; x = e;' と記述されたものと 見なして初期化するものがあります。

お使いのコンパイラが、前者の挙動をする場合は、 「常に直接初期化を使用する(-audi+)」オプション を設定する必要があります。後者の場合は、デフォルト(-audi-)のままにします。

具体的には、お使いのコンパイラが次のソースコードをエラーなく コンパイルできる場合は、-audi+オプションを設定する必要があります。 // Error ==> -audi- (default) // Success ==> -audi+ class A{}; class B { public: B(const A&) {} }; class C { public: C(const B&) {} }; void foo() { A c1; C c2 = c1; // Problem } int main(void) { return 0; }なお、設定方法は次の通りです。

GUIから設定する場合:
[コンパイラ パーソナリティ] の [拡張] タブで
[常に直接初期化を使用する]
チェックボックスを選択します。

設定ファイルを直接編集する場合:
-audi+ と記述します。