构造函数使用多个参数时所需的显式关键字
Is the explicit keyword needed with a constructor taking more than one parameter?
这个问题与前面的C++11(C++03)标准有关。explicit
防止从一种类型到另一种类型的隐式转换。例如:
struct Foo
{
explicit Foo(int);
};
Foo f = 5; // will not compile
Foo b = Foo(5); // works
如果我们有一个接受两个或多个参数的构造函数,explicit
会阻止什么?我知道在C++11中,你已经准备好了初始化,所以它将阻止诸如之类的构造
struct Foo
{
explicit Foo(int, int);
};
Foo f = {4, 2}; // error!
但在C++03中,我们没有支持初始化,那么explicit
关键字在这里阻止了什么样的构造?
如果有人用默认参数更改方法的签名:,这可能会很有趣
struct Foo
{
explicit Foo(int, int = 0);
};
使用explicit
关键字,您可以习惯地说,您永远不希望构造函数进行隐式转换。
如果我们有一个接受两个或多个参数的构造函数,
explicit
会阻止什么?
什么都没有。
相关文章:
- C++/11 auto 关键字是在更有效时推导参数进行按引用传递,还是始终按值传递?
- 如何通过 boost::p ython 重命名构造函数的关键字参数
- C++带有 using 关键字和参数包的模板函数
- 如何在 C++ 的 lambda 函数中传递同名的局部变量和参数(使用此关键字)?
- 是否可以在聚合初始化中使用指定的初始值设定项来获取关键字参数C++?
- 如何将"using"关键字用于可变参数模板
- 当没有显式关键字与单参数构造函数一起使用时,编译器可以发出警告
- 为什么在函数参数编译中没有标识符的const关键字
- 省略C++可变参数 lambda 中的"auto"关键字?
- 如何使用pybind11传递Python的关键字参数?
- 视觉C++:即使使用关键字,参数声明也会隐藏类成员"this"
- 模板关键字作为模板参数
- lambda 中的跨平台"auto"关键字用法:integral_constant作为函数参数
- 为什么关键字“显式”不适用于函数参数
- 如何使用自动和声明的关键字来释放模板参数扣除
- 使用参数和此关键字时的计算顺序
- 构造函数使用多个参数时所需的显式关键字
- C++11`using`关键字:专门化模板参数的模板别名
- 函数参数之前的类关键字是什么
- 模板参数列表中的额外 typename 关键字:是否有效