指定const对非const的函数调用?

时间:2015-02-24 01:05:06

标签: c++ reference const

在我的代码中,我指定了两个执行相同操作的函数,除了一个返回一个const对象并指定为const:

const Object& getObject(...) const {...}

而另一个不是:

Object& getObject(...) {...}

当我尝试这样调用getObject时:

Object o = getObject(...);

它使用的是const版本,当我需要使用非const时。如何指定使用哪一个?

2 个答案:

答案 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。

相关问题