簡體   English   中英

在 C++ 中使用函數式類型轉換初始化變量

[英]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

  1. 純右值的初始化(C++17 前)通過函數式強制轉換或帶括號的表達式列表的純右值的結果對象(C++17 起)

您的分析缺少一些步驟。

 int *c = new int(a);
  1. 這執行動態分配的int實例的直接初始化。

  2. new運算符求值為一個指針純右值(type = int* ),它是這個新int對象的地址。

  3. c是從指針純右值復制初始化的。

 int d = int(a);
  1. 這執行臨時int實例的直接初始化,它是一個純右值(type = int )。

  2. d是從此純右值復制初始化的。

在這兩種情況下,復制構造函數調用在所有 C++ 版本中都適用於省略,並且在最新的標准中保證省略。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM