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

前端之家收集整理的这篇文章主要介绍了c – 编译器是否为“const”和“not-const”函数提供了模糊错误前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在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函数,导致正常操作发生

希望有所帮助!

猜你在找的C&C++相关文章