什麼是C 值初始化

時間 2021-06-01 12:46:54

1樓:「已登出」

容器的初始化分為兩部分,初始化容器的的大小和初始化容器內的元素T(如果容器不為空)。不為空時,如果使用者不提供T初始化方式,容器會用預設的方式構造元素T。非raw(內建)型別呼叫預設建構函式。

如果不對,請知友指正

2樓:雜燴飯大人

題主糊塗的原因很簡單:

「值初始化是只提供vector物件容納的元素數量而不用略去初始值」 這句話的翻譯是有問題的,原文段落「

We can usually omit the value and supply only a size. In this case the library creates a value-initialized element initializer for us .This library-generated value is used to

initialize each element in the container」 看原文就很清晰了。

首先說的是 vector可以只使用其包含的元素size進行初始化,這裡的初始化的物件是vector,其使用的是直接初始化(direct initialization)。

然後如果用上面的建構函式直接初始化vector,那麼vector內部會用值初始化(value initialization)初始化乙個T型別的物件,並用此物件作為初始值對vector內所有物件進行初始化,至於值初始化到底是個啥直接看這裡就好了value initialization。

顯然你說的「int *p=new int()」中new int()滿足value initialization的觸發條件2: new T (),因此p指向的物件是用值初始化完成的。。。,然後再掰碎的話,new出來的位址作為p的初始值通過拷貝初始化(copy initialization)對p進行初始化。。。。。。

究其原因,還是翻譯的問題^^以上~

3樓:搬磚俠

c++11後帶括號的如 new T();T{};都是value initialization

不帶的括號的都是default initialization。

詳細的區別見http://www.

4樓:叛逆者

vector v(n)表示建立乙個vector,元素個數是n。而裡面每個元素是沒有初始化值的。n是vector的構造函式引數,也就是初始化值。

他初始化的是vector,不是vector裡面的內容。

int* p = new int(n);是建立乙個int,並把這個int的值初始化成n。你如果要陣列的話,那是int* p = new int[n]。這才是建立乙個長度為n的陣列。

== 2016/3/3更新 ==

似乎很多人沒搞懂題主問得「值初始化」是什麼。vector會呼叫預設構造,這是基本常識,而且完全不在本題導論的範圍內。呼叫預設構造並不是用乙個值去初始化,也就是說並沒有題主說的「值初始化」。

C 物件的初始化問題?

Sunchy321 Otherwise i.e.for the remaining copy initialization cases user dened conversion sequences that can convert from the source type to the desti...

C 的類成員初始化 定義的時候寫 寫在初始化列表裡 寫在建構函式函式體中 有什麼區別?

jencol teng 首先,初始化順序是按照宣告順序初始化。其次,C 11之後,允許直接在類中初始化變數,C 11之前只有部分編譯器允許。其初始化效率和初始化列表一樣。重點 如果變數放在初始化列表,那麼在類初始化的時候,直接呼叫帶引數的建構函式初始化,而不是使用預設建構函式初始化。來乙個例子 cl...

c 類的建構函式初始化問題??

Right If you don t specify any constructors,the compiler will write one for you that doesn t take any arguments.This compiler generated default constr...