zoukankan      html  css  js  c++  java
  • C++函数二义性问题,我怎么感觉编译器有偷懒嫌疑!!!

    瞎扯一段,讲得不一定对。纯属学习!

    struct BB
    {
    void a(){
    cout << "bb's a() ";
    }
    };

    struct B1 : public BB
    {
    };

    struct B2 : public BB
    {
    };

    struct CC : virtual public B1,public B2
    {
    CC()
    {

     a(); // 调用a函数,编译不过,需这样调B1::a();B2::a();BB::a();

    }
    };

    在上述代码中,struct CC的构造里调用a()函数会产生所谓的二义性。好吧,事实就是这样。在此瞎扯一段,在这个实例里,如果编译器足够聪明,这里本不该产生二义性才对。因为这个函数并没有什么“真正的继承”问题,B1和B2里也没有覆盖定义a()函数。如果覆盖了,调用时要加限定符,不然会产生二义性,这我还能理解。但仅是这个例子中,假设编译器允许它编译成功,真的会有二义性吗?会产生调用错误吗?我觉得没有。所以我瞎讲一下,编译器有偷懒嫌疑。现在的编程都是朝着越来越精简的方向走了,没有用的语法限制只会带来麻烦。好吧,以前几乎不用多继承,我一直凭直觉以为这种情况下直接调a()不会有问题,现在涨下知识。以上就是粗略见解,讲得不好不对请原谅!

  • 相关阅读:
    探讨e.target与e.currentTarget
    JavaScript事件模型
    博客
    angular创建自定义指令的四种方式
    jqueryMobile模块整理—图标(icons)
    jqueryMobile模块整理—按钮(buttons)
    Visio 2010,如何打开多个窗口
    Ajax.ActionLink浏览器中代码解析问题
    响应式布局
    jquery的each
  • 原文地址:https://www.cnblogs.com/openlib/p/5361205.html
Copyright © 2011-2022 走看看