8

我可以将显式与 init-list ctor 一起使用来确保像 {a} 这样的表达式不会导致意外的隐式转换吗?还有一个想法:我应该担心吗?与简单的相比,编写{a}错误的可能性更小a,但另一方面,从代码中可能仍不清楚我们正在通过隐式转换构造对象。

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

2 回答 2

3

你不能。它确实会导致意外的隐式转换。

但是,不允许意外的隐式转换,编译器将拒绝您的程序。然而,这并不能阻止编译器选择或考虑它。例子

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

 int main() {
   // ambiguous
   f({bar1, bar2, bar3});
 }
于 2013-02-11T22:15:55.143 回答
0

你当然可以。是否真的应该取决于情况,尽管我认为一般来说很少见。

于 2013-02-11T03:17:45.060 回答