c++ explicit关键字

c++ explicit关键字,第1张

概述本文章向大家介绍c++ explicit关键字,主要包括c++ explicit关键字使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

考虑以下代码:

class A

{

private:

int a;

public:

A(int i):a(i){}

};

int main()

{

A a1 = 1; //OK

return 0;

}

上面main中1是内置的int型,但是编译器把它隐式地转化成了A类型,因为刚好A的构造函数只有一个参数且该参数为int型。


这看起来很方便,但有时却可能带来不想要的结果,如下例:

class myString

{

public:

string str = "";

myString(int len)

{

str.resize(len);

}

myString(const char p)

{

str.append(1,p);

}

};

int main()

{

myString s = '0';

cout << s.str <

cout << s.str.size() <

}

这里我们的想法是要把s变成‘0’这个字符,然后输出的却是空字符且长度为48——这是因为编译器隐式地把‘0’转化成了int,也就是48(‘0’的ACII码),然后用这个48去调用myString(int)这个构造函数。这就是编译器的方便性、却带来了不想要的结果。


为了不发生这种意想不到的情况,需要在构造函数前加explicit关键字:

class myString

{

public:

string str = "";

explicit myString(int len) //explicit构造函数

{

str.resize(len);

}

explicit myString(const char p) //explicit构造函数

{

str.append(1,p);

}

};

int main()

{

myString s = '0'; //错误:‘0’没法再隐式转化成myString类了

myString s('0'); //OK

cout << s.str <

cout << s.str.size() <

}

总结

以上是内存溢出为你收集整理的c++ explicit关键字全部内容,希望文章能够帮你解决c++ explicit关键字所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/langs/1264375.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-08
下一篇2022-06-08

发表评论

登录后才能评论

评论列表(0条)

    保存