1

显式指定方法/构造函数是否意味着不能隐式调用它?我的意思是如果一个构造函数被指定为显式的,它不能被一些像 = 这样的操作符或像转换器构造函数这样的其他方法隐式调用吗?

在那种情况下,将方法/构造函数指定为显式是否有任何重要性?将方法/构造函数指定为显式有什么好处?

4

2 回答 2

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只能用于构造函数,不能用于函数。虽然它可以用于具有多个参数的构造函数,但对于具有多个参数的构造函数,关键字并没有实际用途,因为编译器只能使用具有一个参数的构造函数进行隐式转换。

于 2010-12-13T09:05:11.620 回答
0

函数不能有明确的说明符。fnc 具有显式说明符是没有意义的。至于 ctor - 你的问题的答案是肯定的。声明 ctor 是显式的,这意味着隐式调用它是非法的。
什么时候有用?例如,在您的班级的情况下:

class X
{
X(char){/*something really cool*/}
};

稍后在您将编写的代码中:

X _1 = 'a';//this line will call conv ctor

上面这样的行经常发生程序员有不同的想法,这种转换完全是无意的。

于 2010-12-13T09:03:37.643 回答