当前位置:  开发笔记 > 编程语言 > 正文

(涉及显式)优先级与运算符和构造函数转换

如何解决《(涉及显式)优先级与运算符和构造函数转换》经验,为你挑选了0个好方法。

我浏览了很多与转换相关的问题,但似乎没有人以这种方式讨论显式关键字.这是代码:

struct B;
struct A{
    /*explicit*/ A(const B&){ cout << 1; }  // *1
};
struct B{
    /*explicit*/ operator A()const{ cout << 2; } // *2
};

void foo(const A &){}

int main(void){
    B b;
    foo( /*static_cast*/ (b) ); // *3
}

结果:(Y:未注释,N:注释,X:或者)

# | *1 | *2 | *3 |output|  
1 |  N |  N |  N |error |
2 |  N |  N |  Y |  1   |
3 |  N |  Y |  N |  1   |
4 |  N |  Y |  Y |  1   |
5 |  Y |  N |  N |  2   |
6 |  Y |  N |  Y |  1   |
7 |  Y |  Y |  N |error |
8 |  Y |  Y |  Y |  1   |

1,7是错误,这是正常的.(模糊和没有自动转换)
2似乎构造函数具有更高的优先级,但为什么呢?
3,5很容易理解.
4很奇怪,因为它没有调用显式的.为什么?
6可能是由于'显式'或构造函数具有更高的优先级.哪一个是原因?8似乎构造函数具有更高的优先级,但为什么呢?

有人可以提供一些解释吗?谢谢!

推荐阅读
臭小子
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有