Konstruktor typów podstawowych

0

Cześć,
mam pytanie odnośnie jawnych konstruktorów typów podstawowych. W implementacjach często zamiast dokładnych wartości jest wywołany jawny konstruktor:

int a = int();
int b = int{};
float c = float();
void *p = (void *){};

Oczywiście typ najczęściej nie jest określony (wygląda to +/- tak: template < typename _Ty > /* ... */ _Ty val = _Ty(), ale to nieistotne).
I tutaj się zaczyna pytanie. Czy standard określa, dokładnie jaką wartością jest zainicjalizowana zmienna danego typu? Czy to sprawa kompilatora, i lepiej nie ryzykować?

5

Określa.

To zero-initialize an object or reference of type T means:
if T is a scalar type (3.9), the object is initialized to the value obtained by converting the integer literal 0 (zero) to T;

4

Dla scalar types (http://en.cppreference.com/w/cpp/types/is_scalar) "konstruktor domyślny" tworzy obiekt o wartości 0 (integer literal) zcastowanej do odpowiedniego typu.

1 użytkowników online, w tym zalogowanych: 0, gości: 1