首頁  >  問答  >  主體

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

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

PHPzPHPz2764 天前513

全部回覆(3)我來回復

  • ringa_lee

    ringa_lee2017-04-17 13:41:53

    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


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

    回覆
    0
  • 大家讲道理

    大家讲道理2017-04-17 13:41:53

    int()> ,這不是函數嗎

    回覆
    0
  • 天蓬老师

    天蓬老师2017-04-17 13:41:53

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

    回覆
    0
  • 取消回覆