2017-02-10 38 views
0

對於通用的方法來找到一個向量元素的大小,這是有效的:`sizeof(some_vector [0])`有效嗎?

std::vector<float> some_vector; 
int size = sizeof(some_vector[0]); 

或者可能這會導致問題,因爲some_vector [0]可能是空的?

無論如何,我猜這是在編譯期間評估的,但是它是按照標準嗎?

+0

這是非常好的,所以'sizeof(* static_cast (0))'; – Nawaz

+4

請記住'v [0]'返回的內容可能與'std :: vector v;'中的'T'不是同一類型。例如,考慮'vector '返回的代理類型。 – BoBTFish

回答

2

sizeof運算符與未評估的表達式一起使用。所以你可以使用這個表達式來確定矢量元素的大小。

從C++標準(5.3.3 SIZEOF)

1 sizeof運算產生在其操作數的對象 表示的字節數。該操作數可以是一個表達式, 是一個未評估的操作數(第5章),或者是一個帶括號的 type-id。 sizeof運算符不能應用於表達式爲 的函數或不完整類型,其枚舉類型的基本類型在所有枚舉器已被聲明爲 之前未固定,爲這些類型的括號化名稱或glvalue 指定一個位域。 sizeof(char),sizeof(signed char)和sizeof(unsigned char)的sizeof爲1.應用於其他 基本類型(3.9.1)的sizeof的結果是實現定義的。 [注:特別是在 中,sizeof(bool),sizeof(char16_t),sizeof(char32_t)和sizeof(wchar_t)的值是實現定義的75 - 結束註釋] [注意:請參閱1.7 來定義字節和3.9代表對象 的定義。 - 注意]

相關問題