gpt4 book ai didi

c++ - 如果在 C++ 中有两个具有相同名称的方法,一个标记为 const 而另一个没有标记,如何解决方法调用?

转载 作者:搜寻专家 更新时间:2023-10-31 01:49:17 25 4
gpt4 key购买 nike

void testMethod(){
cout<<"Normal Method";
}

void testMethod() const{
cout<<"Const Method";
}

哪些将通过调用 testMethod() 来调用?当我尝试时,第一个被调用。但是这个是怎么决定的,不能总是第一个,否则把这两个当成不同的功能是没有意义的。

最佳答案

如果成员函数是通过对const 的引用或指向const 的指针调用的,或者直接在类型为const 的对象上调用-限定,将选择限定为 const 的重载。否则,将选择不符合 const 条件的重载。

X x;
x.testMethod(); // Calls the non-const version
X const& y = x;
y.testMethod(); // Calls the const version
X* z = &x;
z->testMethod(); // Calls the non-const version
X const w;
w.textMethod(); // Calls the const version

在更正式的术语中,C++11 标准的段落 9.3.2/3 指定(在引用中,cv 代表 const-或-volatile,为了您的问题,您可以忽略 volatile 部分):

A cv-qualified member function can be called on an object-expression (5.2.5) only if the object-expression is as cv-qualified or less-cv-qualified than the member function [...]

关于c++ - 如果在 C++ 中有两个具有相同名称的方法,一个标记为 const 而另一个没有标记,如何解决方法调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16775787/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com