В чем разница между этими типами инициализации? - PullRequest
0 голосов
/ 11 апреля 2020

В c ++ я могу создавать и инициализировать переменные несколькими способами:

int x = 0;
int x(0);
int x = int(0);
int x = int(); // same as zero

, но, например, при объявлении таких типов данных, не являющихся примитивными, есть какая-то ошибка.

string s = "";
string s("");
string s = string("");
string s = string(); // gives an error

В чем различия между этими типами инициализации и почему последний тип работает для int, а не для string?

1 Ответ

1 голос
/ 11 апреля 2020

Они функционально эквивалентны. Вот хорошая страница с подробностями https://en.cppreference.com/w/cpp/language/initialization

int x(0); // direct initialization

// These three are copy initialization with copy elision
int x = 0;
int x = int(0);
int x = int();

/// not initialization!!! declaration of function
int x();

Для строковой ситуации аналогично, хотя там вы также выбираете разные конструкторы в зависимости от того, какие аргументы вы даете во время инициализации.

...