LINUX.ORG.RU

Объясните, пожалуйста, C++11 Uniform Initialization

 


0

3

Изучаю C++. Читаю про него книжку. И вот, автор предлагает вместо

int i = 15;
писать:
int i = {15}; //С указанием, что знак «=» можно опустить
Но я не совсем понимаю:

  1. Зачем это нужно?
  2. Нужно ли это только на сложных структурах данных или, действительно, примитивные типы нужно тоже так же инициализировать?
  3. Принято писать с «=» или без?
★★★★★

Последнее исправление: proud_anon (всего исправлений: 1)

Ответ на: комментарий от Debasher

мы имели в виду другое когда говорили крестоносцам про стандарты >_>

У меня ещё скилл C++ недостаточно прокачан, чтобы понять эту шутку.

proud_anon ★★★★★
() автор топика
Последнее исправление: proud_anon (всего исправлений: 1)

Имхо, автор упоролся. Не вижу ни единой причины писать эти скобки у примитивных типов.

Stil ★★★★★
()

Читните первоисточник, т.е. страусятину.

Stroustroup, The C++ Programming Language, 4ed.

Initialization using {} , list initialization, does not allow narrowing

char c4 {24}; // OK: 24 can be represented exactly as a char
char c5 {264}; // error (assuming 8-bit chars): 264 cannot be represented as a char
int x4 {2.0}; // error : no double to int value conversion

...

There is no advantage to using {} initialization, and one trap, when using auto to get the type determined by the initializer. The trap is that if the initializer is a {} -list, we may not want its type deduced (§6.3.6.2). For example:

auto z1 {99}; // z1 is an initializer_list<int>
auto z2 = 99; // z2 is an int
So prefer = when using auto .

...

The empty initializer list, {} , is used to indicate that a default value is desired. For example:

int x4 {}; // x4 becomes 0
double d4 {}; // d4 becomes 0.0
char∗ p {};  // p becomes nullptr
vector<int> v4{}; // v4 becomes the empty vector
string s4 {}; // s4 becomes ""

ovk48 ★★★
()
Последнее исправление: ovk48 (всего исправлений: 2)
Ответ на: комментарий от ovk48

Читните первоисточник, т.е. страусятину.

Взял книжку в библиотеке, а Страуструпа там почему-то не было, вроде, раздали всего.

Initialization using {} , list initialization, does not allow narrowing

Во! Вот это очень интересно, спасибо.

proud_anon ★★★★★
() автор топика
Последнее исправление: proud_anon (всего исправлений: 2)
Ответ на: комментарий от fluorite

Вот тут хорошо расписано.

А, действительно. Я эту статью нашёл, но не заметил про narrowing. Наверное, потому что это в секции «reasons not to».

proud_anon ★★★★★
() автор топика
Ответ на: комментарий от anonymous

Плюсы всё больше похожи язык без спроектированного синтаксиса.

Дык, так и есть. В том смысле, что спроектировать на 20 лет вперёд сложновато.

DarkEld3r ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.