2015-06-09 2 views
1

У меня этот образец кода:Инициализация в списке - значение по умолчанию

#include <iostream> 

using namespace std; 

class Polygon 
{ 
private: 
    double _Field; 

public: 
    Polygon(): _Field(){} 
    void show_field(){ cout << _Field << endl; } 
}; 

int main() 
{ 
    Polygon P1; 

    P1.show_field(); 
    return 0; 
} 

Я просто интересно, почему метод шоу() всегда показывает мне значение 0? Не инициализируется ли инициализация в списке

Polygon(): _Field(){} 

по умолчанию, если аргумент отсутствует, если нет аргументов?

+0

Да, для встроенных типов –

+0

double по умолчанию инициализируется 0 – worenga

ответ

4

Да, это так. Так же, как

double d = double(); 
double *p = new double(); 

инициализирует d с 0 и выделить *p инициализируется 0.

Инициализатор () обозначает инициализацию значения в C++, которая сводится к нулевой инициализации для скалярных типов. Это никоим образом не ограничивается списками инициализаторов конструктора. Он может использоваться в различных контекстах.

Это сработало именно на C++ с начала стандартизированных времен, за исключением того, что в версиях языка pre-C++ 03 не было такой вещи, как инициализация значения. В C++ 98 инициализатор () запускал инициализацию по умолчанию, которая также обнуляла скалярные типы.

В современном C++ (C++ 11 и более поздних) вы можете использовать инициализатор {} вместо () для достижения такого же эффекта. С {} вы также можете сделать

double d{}; 

, который объявляет переменную d инициализируется 0.

Смежные вопросы