【发布时间】:2016-05-01 05:28:58
【问题描述】:
对于定义函数的第二个const 版本,这样做是否保证安全?看起来它会无限递归,因为我想返回 const 但我要调用的另一个函数是非常量。
它适用于 g++,但我担心这是不安全的。
#include <iostream>
using namespace std;
class test {
public:
int* doSomething(int a) {
int* someInt = new int(a);
return someInt;
}
const int* doSomething(int a) const {
return doSomething(a);
}
};
int main() {
test a;
cout << *a.doSomething(12345) << endl;
return 1;
}
【问题讨论】:
-
这段代码调用了
doSomething的非常量版本。尝试调用 const 版本,然后看着它爆炸。 -
分配时为什么不初始化
someInt:int* someInt = new int(a); -
我一直认为 c++ 不允许重载仅返回类型不同的函数......
-
@Anedar:重载不仅在返回类型上有所不同。它也有不同的 cv-qualification。
-
@Anedar - 它没有。但这里不是这样。这两个函数的
const限定符不同,它决定了哪个可以在 const 对象上调用,哪个可以在非常量对象上调用。
标签: c++ recursion constants const-method