質問: ### 質問内容 C/C++のコードに以下のような記述がありました. ``` int a(10); ``` これは一般的な変数の宣言・初期化の ``` int a=10; ``` と同様でしょうか? コンパイルの時点で異なる挙動がなされるのでしょか? ### 補足情報 Windows10 Pro VisualStudio2017 Community
回答: C++17のドラフトにあるGrammar summaryを見る限り、両方ともinitializerに該当しています。 cpp referenceを信じるとDirect initializationとCopy initializationに分かれるようですが、non-class typeなので両方とも標準の変換で型に変換されるとあります。(この場合、int -> int なので変換無し) Direct initializatioの方にはその値で初期化される、とありますが、Copy~の方には特に書いてません。 ただ、それらが直値が入るかどこかからコピーするか、といったは記載は見あたりませんでした。このへんは実装依存じゃないかなぁ? VC(19.16.27024.1 for x64)だと両方とも ``` mov dword ptr [ebp-X],0Ah ``` で同じ見たいです。(volatileはつけましたけど)