指定方法/构造函数是否意味着无法隐式调用它?

时间:2010-12-13 08:54:44

标签: c++ methods explicit explicit-constructor

明确指定方法/构造函数是否意味着无法隐式调用它?我的意思是如果构造函数被指定为显式,不能由某些运算符(如=或其他方法,如转换器构造函数)隐式调用吗?

在这种情况下,指定一个显式的方法/构造函数是否具有任何重要性?指定一个方法/构造函数是显式的有什么好处?

2 个答案:

答案 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

如上所述,经常发生程序员心中有些不同的情况,这种转换完全是无意的。