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()不会有问题,现在涨下知识。以上就是粗略见解,讲得不好不对请原谅!

  • 相关阅读:
    (十一)Updating Documents
    (十)Modifying Your Data
    (九)Delete an Index
    (八)Index and Query a Document
    (七)Create an Index
    (六)List All Indices
    (五)Cluster Health
    (四)Exploring Your Cluster
    (三)Installation
    (二)Basic Concepts 基本概念
  • 原文地址:https://www.cnblogs.com/openlib/p/5361205.html
Copyright © 2011-2022 走看看