重複の可能性:
条件で定義された変数を引数で構成できないのはなぜですか?
次の簡単な例を考えてみましょう。
/*1*/ int main() {
/*2*/ for (int i(7); i;){break;}
/*3*/ if (int i(7)) {}
/*4*/ }
行 2 は正常にコンパイルされるのに、行 3 ではエラーが発生するのはなぜですか? これは、この側面で if ステートメントが for ループよりも扱いが悪いのはなぜか、私には少し奇妙です。
これがコンパイラ固有の場合 - gcc-4.5.1でテストしました:
prog.cpp: 関数 'int main()' 内: prog.cpp:3:7: エラー: 'int' の前にプライマリ式が必要です prog.cpp:3:7: エラー: 'int' の前に ')' が必要です
私はこの質問に触発されました
[アップデート]
私はこれがうまくコンパイルされることを知っています:
/*1*/ int main() {
/*2*/ for (int i = 7; i;){break;}
/*3*/ if (int i = 7) {}
/*4*/ }
[更新2]
std::unique_ptr<>
これは純粋に学術的な質問のようですが、これはコピーできないタイプの場合、非常に重要になる可能性があります。
#include <memory>
int main() {
if (std::unique_ptr<int> i = new (std::nothrow) int(7)) {
}
if (std::unique_ptr<int> i(new (std::nothrow) int(7))) {
}
}
これら 2 種類のいずれも許可されません。新しい C++11 構文についてよくわかりませんか{}
?