C ++ 11 Конструктор initializer_list помечен как «явный»

Могу ли я использовать явное с ctor списка инициализации, чтобы убедиться, что выражение вроде {a} не приводит к неожиданному неявному преобразованию? И еще одна мысль: должен Я беспокоюсь об этом? Пишу {a} менее вероятно, будет ошибкой, чем просто a, но с другой стороны, из кода все еще может быть неясно, что мы создаем объект посредством неявного преобразования.

class Foo
{
explicit Foo (std::initializer_list<Bar> ilist) { /*...*/}
};

4

Решение

Ты не можешь. Это делает привести к неожиданному неявному преобразованию.

Однако неожиданное неявное преобразование не разрешено, и компилятор отклонит вашу программу. Это, однако, не мешает компилятору выбирать или учитывать его. пример

 void f(Foo);
void f(std::vector<Bar>);

int main() {
// ambiguous
f({bar1, bar2, bar3});
}
1

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

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

0

По вопросам рекламы [email protected]