繁体   English   中英

编译器如何确定要使用哪个函数?

[英]How does compiler determine which function to use?

众所周知,编译器通过重载的函数签名(例如参数类型)来确定函数,但是这是如何工作的:

v[i] = 1;

当编译器查看以下两个重载函数时:

const T& operator[](size_t i) const;
T& operator[](size_t i);

如何确定要使用哪个? 编译器是否尝试使用第一个,然后发现它不起作用,然后尝试使用第二个?

如果对象是非const,则调用该函数的非const版本(如果可用),否则调用const版本。 现在看看哪个是:

const T& operator[](size_t i) const;   //CONST MEMBER FUNCTION
T& operator[](size_t i);               //NON-CONST MEMBER FUNCTION

一个例子,

void f(std::vector<int> const &v1, std::vector<int> & v2)
{
   std::cout << v1[0] << std::endl; //invokes const version    
   std::cout << v2[0] << std::endl; //invokes non-const version
}

现在,当您编写时:

v[i] = 1; 

如果我不假设vstd::vector ,则取决于v的常数。 如果v是const,则将调用const-version,否则将调用非const版本(如果可用),否则v将转换为const对象,然后将调用const函数)。

const成员函数不能在const对象上调用。

因此,为了在实践中有用,规则必须是在非const对象上调用它,相反,在const对象上调用const成员函数。

这就是规则。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM