「最も厄介な解析」の曖昧さ: ユニフォーム初期化子の解明
C の領域では、「最も厄介な解析」の曖昧さが発生する可能性があります次のコードで例示されるように、均一初期化子が発生した場合:
<code class="cpp">class Timer { public: Timer() {} }; int main() { auto dv = Timer(); // What is Timer() ? And what type is dv? int time_keeper(Timer()); // This is a function right? And why isn't the argument "Timer (*) ()"? return 0; }</code>
dv の解釈
行 auto dv = Timer(); では、dv の型Timer() の解釈に依存します。これは次のいずれかです:
この場合、これはコンストラクター呼び出しを意味し、結果として dv は Timer 型のオブジェクトになります。 auto キーワードは、イニシャライザに基づいて型を推測します。
time_keeper について
行 int time_keeper(Timer()); では、time_keeper という名前の関数が宣言されています。引数は、予想されるとおり、Timer (*) () 型の関数ポインターではありません。むしろ、これはタイマーを返し、引数をとらない関数へのポインタを表します。これは次の理由によるものです。
結論
「最も厄介な解析」のあいまいさは、混乱の可能性を浮き彫りにしますC で特定の構造を解釈するとき。このようなシナリオを正しく理解するには、均一初期化と関数減衰の概念を理解することが重要です。
以上が`Timer()` はコンストラクター呼び出しですか、それとも関数呼び出しですか? C の「最も厄介な解析」のあいまいさの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。