![](/img/trans.png)
[英]c++ Xcode expected '(' for function-style cast or type construction
[英]Initializing a variable with function-style cast in C++
int main(){
int a = 5; // copy initialization.
int b(a); // direct initialization.
int *c = new int(a); // also direct initialization, on heap.
int d = int(a); // functional cast, also direct initialization?
// or copy initialization?
return 0;
}
我有兩個問題:
1 - 我不清楚int(a);
只是一個強制轉換,或者它也是一個初始化程序。 d
是被copy initialized
還是被direct initialized
? ie 是等於這個的表達式:
int d = 5;
或這個
int d(5);
2- 我想確認是否為new int(a);
只是一個初始值設定項,而不是轉換為 int。 還想確認是direct initialization
而不是copy initialization
。
我已閱讀參考文獻的第 (3) 節,但我不清楚答案: https : //en.cppreference.com/w/cpp/language/direct_initialization
- 純右值的初始化(C++17 前)通過函數式強制轉換或帶括號的表達式列表的純右值的結果對象(C++17 起)
您的分析缺少一些步驟。
int *c = new int(a);
這執行動態分配的int
實例的直接初始化。
new
運算符求值為一個指針純右值(type = int*
),它是這個新int
對象的地址。
c
是從指針純右值復制初始化的。
int d = int(a);
這執行臨時int
實例的直接初始化,它是一個純右值(type = int
)。
d
是從此純右值復制初始化的。
在這兩種情況下,復制構造函數調用在所有 C++ 版本中都適用於省略,並且在最新的標准中保證省略。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.