加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 编译器是否为“const”和“not-const”函数提供了模糊错误

发布时间:2020-12-16 03:43:19 所属栏目:百科 来源:网络整理
导读:我在c结构中重载了const和非const函数.然后,我运行程序,我想知道,它没有模棱两可的错误工作正常. #include iostreamstruct St { int f() const { return 1; } int f() { return 2; }} s;int main() { int ret = s.f(); std::coutretstd::endl; return 0;} 所
我在c结构中重载了const和非const函数.然后,我运行程序,我想知道,它没有模棱两可的错误工作正常.
#include <iostream>

struct St 
{
  int f() const 
  { 
      return 1; 
  }

  int f()
  { 
      return 2;
  }
} s;

int main() 
{
    int ret = s.f();  
    std::cout<<ret<<std::endl;
    return 0;
}

所以,我只是想知道,为什么编译器不会给“const”和“not-const”函数带来模糊错误?

解决方法

这是 const overloading,即C中的 a thing.

在这种情况下,编译器确定struct没有重载函数返回类型(当然是disallowed due to ambiguity ),而是具有不同“constness”的重载函数,这是其他一个答案中的一个术语,这在这里是有意义的.

至于没有编译器错误:

> const重载是C规范的一部分,所以没有错误
>在编译时,编译器“看到”结构返回到非const环境,因此使用非const函数,导致正常操作发生

希望有所帮助!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读