我可以使用显式的init-list ctor来确保像{a}这样的表达式不会导致意外的隐式转换吗?另一个想法是:应该我担心吗?写{a}
不太可能是简单的a
错误,但另一方面,我们通过隐式转换构建对象的代码仍然可能不清楚。
class Foo
{
explicit Foo (std::initializer_list<Bar> ilist) { /*...*/}
};
答案 0 :(得分:2)
你做不到。 导致意外的隐式转换。
但是,不允许意外的隐式转换,编译器将拒绝您的程序。然而,这并不会阻止编译器选择或考虑它。实施例
void f(Foo);
void f(std::vector<Bar>);
int main() {
// ambiguous
f({bar1, bar2, bar3});
}
答案 1 :(得分:0)
你当然可以。你是否真的应该依赖于这种情况,尽管我认为这种情况很少见。