大佬教程收集整理的这篇文章主要介绍了c – 应用于运算符而不是构造函数的显式关键字,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
为什么要让运算符明确.我认为明确是为了防止对构造函数的隐式调用?
class Content { public: virtual ~Content() = 0; virtual explicit operator float&(); virtual explicit operator long long&(); virtual explicit operator std::string&() }
从C 11开始,它也适用于user-defined conversions(也就是演员操作符).
在此上下文中使用,explicit关键字使转换仅适用于直接初始化和显式转换.见[class.conv.fct¶2]:
这有助于您确保编译器不会针对您的意图尝试转换,因此您必须自己明确地进行转换,从而减少出错的空间.例:
struct Foo { explicit operator int() {return 0;} operator int*() {return nullptr;} }; int main() { Foo foo; //int xi = foo; // Error,conversion must be explicit int i = static_cast<int>(foo); // OK,conversion is explicit int* i_ptr = foo; // OK,implicit conversion to `int*` is allowed int i_direct(foo); // OK,direct initialization allowed int* i_ptr_direct(foo); // OK,direct initialization after implicit conversion return 0; }
它还可以帮助解决多个转换选项适用的情况下的歧义,使编译器没有标准来决定选择哪一个:
struct Bar { operator int() {return 1;} operator char() {return '1';} }; int main() { Bar bar; //double d = bar; // Error,implicit conversion is ambiguous return 0; }
添加明确:
struct Bar { operator int() {return 1;} explicit operator char() {return '1';} }; int main() { Bar bar; double d = bar; // OK,implicit conversion to `int` is the only option return 0; }
以上是大佬教程为你收集整理的c – 应用于运算符而不是构造函数的显式关键字全部内容,希望文章能够帮你解决c – 应用于运算符而不是构造函数的显式关键字所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。