c++什么时候支持int()/bool()这种写法?有具体的标准解释么?
PHPz
PHPz 2017-04-17 13:39:53
0
3
544

c++什么时候支持int()/bool()这种写法?有具体的标准解释么?

PHPz
PHPz

学习是最好的投资!

全部回覆(3)
左手右手慢动作

int()這種格式據我所知出現在兩種情況中,一種是在int類型的變數初始化的時候,另一種是在類別中定義型別轉換運算子(type conversion operator )的時候。不知道題主想問的是哪一種,就都簡單說一下吧。

1. int型態的變數初始化

int i1 = 1;
int i2(1);
int i3 = int(1);

int *pi = new int(1);

i1i2i3三種寫法完全相同。

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 的意思就是初始化為int0

2. 型別轉換運算子

// 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轉換成Xint


至於最早有標準出現是什麼時候就不清楚了,題主如果有興趣可以自己去調查一下:)

大家讲道理

int()> ,這不是函數嗎

Peter_Zhu

我沒記錯的話,c++03,內建型別的值初始化。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板