Имеет ли значение знак равенства при инициализации фигурной скобки? например. ‘T a = {}’ против ‘T a {}’

Вот два способа инициализации переменной в C ++ 11:

T a {something};
T a = {something};

Я проверил эти два во всех сценариях, о которых я мог думать, и я не заметил разницу. Этот ответ предполагает, что есть тонкая разница между этими двумя:

Для переменных я не обращаю особого внимания между T t = { init }; или же T t { init }; Стили, я нахожу разницу незначительной и в худшем случае приведет только к полезному сообщению компилятора о неправильном использовании явного конструктора.

Итак, есть ли разница между этими двумя?

25

Решение

Единственное существенное различие, которое я знаю, заключается в лечении explicit конструкторы:

struct foo
{
explicit foo(int);
};

foo f0 {42};    // OK
foo f1 = {42};  // not allowed

Это похоже на «традиционную» инициализацию:

foo f0 (42);  // OK
foo f1 = 42;  // not allowed

Смотрите [over.match.list] / 1.


Кроме того, есть дефект (см. CWG 1270) в C ++ 11, что позволяет скобки только для формы T a = {something}

struct aggr
{
int arr[5];
};

aggr a0 = {1,2,3,4,5};  // OK
aggr a1 {1,2,3,4,5};    // not allowed
21

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector