簡體   English   中英

復制/分配基本類型

[英]Copy/assignment of fundamental types

標准對基本類型的復制/分配有什么看法?

對於類類型,我們有復制構造函數,賦值運算符,它將右側作為引用(它必須是引用,否則我們有無限遞歸):

struct Foo {
    Foo(const Foo &);
};

這是如何為基本類型定義的?

看看這個例子:

const Foo foo;
Foo f = foo;

const int a = 2;
int b = a;

這里, f = foo; odr-uses foo ,因為copy-constructor需要引用,對吧? 如果基本類型的副本有參考參數,那么b = a也會使用a 是這樣的嗎? 如果沒有,它是如何處理的?

我們可以追蹤它。 從[dcl.init]開始。

(17.8) - 否則,初始化對象的初始值是初始化表達式的(可能已轉換)值。 如有必要,將使用標准轉換將初始化表達式轉換為目標類型的cv非限定版本; 不考慮用戶定義的轉換。 如果無法進行轉換,則初始化不正確。 當使用無法表示的值初始化位字段時,位字段的結果值是實現定義的。

在這種情況下的標准轉換將是左值到右值轉換上a 但這並不是a壞事。 我們在[basic.def.odr]中看到

2變量X,其名稱顯示為潛在評估表達EX是ODR使用的由除非施加左值到右值轉換為x產生一個常量表達式不調用任何非平凡的功能和,如果x是一個object, ex是表達式e的潛在結果集合的元素,其中左值到右值的轉換應用於e ,或者e是丟棄值表達式。

a是一個常量表達式和替換的axex上述證明它擁有的條件的另一半,所以它不是ODR使用。

暫無
暫無

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

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