编译器是否为"const"和"not-const"函数提供了模糊错误

msc*_*msc 6 c++ const function c++11 c++14

我有重载constnon-constc ++结构的功能.然后,我运行程序,我想知道,它没有模棱两可的错误工作正常.

#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;
}
Run Code Online (Sandbox Code Playgroud)

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

Non*_*714 4

这是const 重载,这是一件事

\n\n

在这种情况下,编译器确定该结构体不具有重载函数返回类型(由于不明确,这是不允许的)当然,),而是具有不同 \xe2\x80\x9cconstness 的重载函数;\xe2\x80\x9d 是一个术语在其他答案之一中,这里有意义。

\n\n

至于没有编译器错误:

\n\n
    \n
  1. const 重载是 C++ 规范的一部分,因此不会出现错误
  2. \n
  3. 在编译时,编译器 \xe2\x80\x9c 看到 \xe2\x80\x9d 该结构体返回到非常量环境,因此使用非常量函数,导致正常操作发生
  4. \n
\n\n

希望有帮助!

\n