問題タブ [most-vexing-parse]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - foo x( (bar()) ); のようなコンストラクター呼び出しで二重括弧が必要なのはなぜですか?
ネストされたコンストラクター呼び出しとブレースに関するC++ FQA エントリを見て、 C ++ パーサーが 2 つを解決する方法と、パーサーがそれを解決できない理由を常に疑問に思っていました。
だから、なぜfoo xxx();
あいまいなのかがわかります。foo x(bar());
しかし、それは明らかに事前宣言ではないため、何が曖昧になります。(つまり、これをうまく検出できる文法が必要です)。
C++ 文法のその部分の制限とあいまいさを誰か説明できますか?
c++ - 「最も厄介な解析」を理解する - なぜあいまいな構文を許可するのですか?
C/C++ での「最も厄介な解析」の問題を理解しようとすると、すぐにこの質問が頭に浮かびます。なぜこの問題を引き起こす構文があるのでしょうか?
例えば、
TimeKeeper time_keeper(Timer())
では、タイプ Timer を返す名前のない関数 ptr を受け取る関数宣言を単純に禁止しないのはなぜでしょうか? TimeKeeper time_keeper(Timer (*)())
関数宣言子として劣っていますか?
このあいまいさが得られるのは、この構文が原因ではないのでしょうか、それとも何か不足していますか?
編集: 個人的にはTimeKeeper time_keeper(Timer())
、関数宣言として使用したことはありません。Timer (*)()
より明確にわかるように、関数ポインターを指定するために常に を使用してきました。
c++ - コピー操作を省略した後の無効なオブジェクト?
重複の可能性:
括弧の空のセットを使用して引数なしでコンストラクターを呼び出すとエラーになるのはなぜですか?
最も厄介な解析: なぜ A は a(()); を実行しないのですか? 仕事?
これは私を怒らせます。単純すぎるのかもしれません。
GCC 4.6 は私に与えます:
コピー操作を省略した後、有効なコードは次のようになります。
でもなんで電話できないのwork()
??
編集:
はい、複製します (以下を参照)。最初に検索したときに元の投稿が見つかりませんでした。これは、この症状の原因が予想外の場所にあるためです。
c++ - なぜこれがデフォルトのコンストラクターを呼び出すのですか?
私はこれがどちらかを印刷することを期待していました
X(int)
、からへX(answer);
のキャストとして解釈される可能性があるため、またはint
X
X(answer);
変数の宣言として解釈される可能性があるため、何もありません。
ただし、それは出力されX()
、なぜX(answer);
デフォルトのコンストラクターを呼び出すのかわかりません。
ボーナスポイント:変数宣言の代わりに一時的な宣言を取得するには、何を変更する必要がありますか?
c++ - gcc における class(*)() の意味
このコンパイラ エラーを理解できません。インスタンス化するクラスは「不透明」と呼ばれるため、投稿のタイトルに class(*)() と書きましたが、その名前は有益でも関連性もありません。これは、テンプレート化された循環バッファーといくつかのテストです。不透明なクラスを使用して、完全なクラス/構造体型でデータ構造をテストしています。また、プリミティブ (現時点では int) を使用してテストしていますが、そのテスト関数ではこのコンパイラ エラーは発生しません。これよりも多くのコードがありますが、関連するセクションと思われるものを提供しました。興味がある場合は、完全なコードがここにあります。
gcc エラー:
tests.cpp:
CircBuf.h:
opaque* を宣言し、それを渡して代わりに削除すると:
同様のエラーが表示されます:
c++ - 一時オブジェクトを使用してコンストラクターを呼び出す
次の問題がわかりません。
完全なエラー メッセージは (Visual Studio 2010)
修正は簡単です:
これは MSVC 固有の問題Box box(InnerBox());
ですか。
c++ - C++ constructor not being called
I'm new to C++ and this is my first time with its classes and I was wondering, how do I call a constructor? I've read some documentation on classes in C++ and that's how I came up with what I have. The constructor calls private methods to setup the server.
c++ - `Listx;`と`Listx()`に違いはありますか?
タイトルは、マーシャル・クラインによる有名なサイトC++FAQに由来しています。
著者は、次の2つのコード例には違いがあると主張しています。
Listがクラスの名前であるとします。次に、関数f()はxと呼ばれるローカルListオブジェクトを宣言します。
ただし、関数g()は、リストを返すx()という関数を宣言します。
しかし、2番目のバリアントを使用するのは本当に間違っていますか?
そして、それが本当に宣言である場合、コンパイラは、関数内で関数を宣言できないと文句を言うのではないでしょうか。
c++ - オーバーロードされた演算子 << は bool 値を出力します。なぜ?
xml_attribute.h
xml_attribute.cpp
ドライバー.cpp
ドライバーからの出力は「1」ですが、「=」記号にしたいです。
への参照を出力するのはなぜですか?
に変更XML_AttributeT a();
するXML_AttributeT a;
と、コンパイルさえしません。
私は何を間違えましたか?
c++ - 非 const 参照の無効な初期化
わかりました、私はこのエラーを理解しようとしていますが、これまでのところ、まったく運がありません. 私は宿題のためにこれを行っているので、含まれているクラスを使用していません。
関連するコードは次のとおりです。
そして、.h ファイルから...:
これにより、エラーがスローされます:「タイプ 'Vec (*)()' の右辺値からのタイプ 'Vec&' の非定数参照の無効な初期化」