C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了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,请注明来意。