[英]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;
如果我不假设v
为std::vector
,则取决于v
的常数。 如果v
是const,则将调用const-version,否则将调用非const版本(如果可用),否则v
将转换为const对象,然后将调用const函数)。
非const
成员函数不能在const
对象上调用。
因此,为了在实践中有用,规则必须是在非const
对象上调用它,相反,在const
对象上调用const
成员函数。
这就是规则。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.