在我的代码中,我指定了两个执行相同操作的函数,除了一个返回一个const对象并指定为const:
const Object& getObject(...) const {...}
而另一个不是:
Object& getObject(...) {...}
当我尝试这样调用getObject
时:
Object o = getObject(...);
它使用的是const版本,当我需要使用非const时。如何指定使用哪一个?
答案 0 :(得分:0)
如果你的代码真的是Object o = getObject(...);
,那么你必须从提供getObject
成员函数的同一个类的成员函数内部调用它。
你说正在调用const
重载;这意味着你在一个对象的const
实例内(或者至少是一个const引用)。因此,您无法可靠地调用非const函数。
你可以通过以下方式施放const:
Object o = const_cast< TheClassName >(*this).getObject(...);
这可能会导致未定义的行为。此外,似乎存在更大的设计问题:通常,对于const函数而言,实际上返回与非const函数不同的对象似乎是一个糟糕的想法。
(我假设他们返回不同的对象,好像他们返回相同的对象,那么你的原始代码就可以了。)
答案 1 :(得分:-2)
如果您确实想使用getObject
返回的引用,则应该
Object& o = getObject(...);
否则,使用Object o = ...
只会调用Object
复制构造函数。但是,此更改不会影响调用哪个getObject
函数 - 这取决于包含getObject
调用的对象是否为const。