明确指定方法/构造函数是否意味着无法隐式调用它?我的意思是如果构造函数被指定为显式,不能由某些运算符(如=或其他方法,如转换器构造函数)隐式调用吗?
在这种情况下,指定一个显式的方法/构造函数是否具有任何重要性?指定一个方法/构造函数是显式的有什么好处?
答案 0 :(得分:1)
class MyClass
{
int i;
MyClass(YourClass &);
};
class YourClass
{
int y;
};
void doSomething(MyClass ref)
{
//Do something interesting over here
}
int main()
{
MyClass obj;
YourClass obj2;
doSomething(obj2);
}
在示例中,由于MyClass
的构造函数未指定为显式,因此在调用函数doSomething()
时将其用于隐式转换。如果MyClass
的构造函数被标记为显式,则编译器将在调用doSomething()
函数时给出错误而不是隐式转换。因此,如果您想避免此类隐式转换,则应使用explicit
关键字。
要添加到上面的内容:关键字explicit
只能用于构造函数而不能用于函数。虽然它可以用于具有多个参数的构造函数,但是对于具有多个参数的构造函数没有实际使用关键字,因为编译器只能使用带有一个参数的构造函数进行隐式转换。
答案 1 :(得分:0)
函数不能具有显式的说明符。 fnc有一个明确的说明符是没有意义的。至于ctor - 你的Q的答案是肯定的。说明ctor是明确的,这意味着隐含地调用它是违法的 什么时候有用?在例如你的班级的情况下:
class X
{
X(char){/*something really cool*/}
};
以后再编写代码:
X _1 = 'a';//this line will call conv ctor
如上所述,经常发生程序员心中有些不同的情况,这种转换完全是无意的。