ringa_lee2017-04-17 13:41:53
int()
這種格式據我所知出現在兩種情況中,一種是在int
類型的變數初始化的時候,另一種是在類別中定義型別轉換運算子(type conversion operator )的時候。不知道題主想問的是哪一種,就都簡單說一下吧。
int
型態的變數初始化int i1 = 1;
int i2(1);
int i3 = int(1);
int *pi = new int(1);
i1
、i2
、i3
三種寫法完全相同。
根據標準的意思,對於基本類型From ISO C++11 § 8.5/13
The form of initialization (using parentheses or =) is generally insignificant, but does matter when the initializer or the entity being initialized has a class type; see below. If the entity the notalized has a class type; see below。 >expression-list in a parenthesized initializer shall be a single expression.
來說,它不是一個類別類型(class type),所以使用圓括號或等號進行初始化的效果是一樣的。 int
int i = int();
(註:會被當作函數宣告)int i();
為什麼的值初始化為i
的問題,標準中其實已經說了:0
From ISO C++11 § 8.5/16對於The semantics of initializers are as follows. ...
— If the initializer is (), the object is value-initialized.
...
型別 value-initialize 的意思就是初始化為int
。 0
// From ISO C++11 § 12.3.2/1
struct X {
operator int();
};
void f(X a) {
int i = int(a);
i = (int)a;
i = a;
}
把X::operator int()
的型別從a
轉換成X
。 int