指定对 const 与非常量的函数调用?
Specifying function call to const vs. non-const?
在我的代码中,我指定了两个函数做同样的事情,除了一个 returns const 对象并指定为 const:
const Object& getObject(...) const {...}
而另一个不是:
Object& getObject(...) {...}
当我尝试这样调用 getObject
时:
Object o = getObject(...);
它正在使用const版本,当我需要使用非常量时。我如何指定使用哪一个?
如果您真的想使用 getObject
返回的引用,您应该这样做
Object& o = getObject(...);
否则,使用Object o = ...
只会调用Object
复制构造函数。但是,此更改不会影响调用哪个 getObject
函数——这取决于包含 getObject
调用的对象是否为常量。
如果您的代码确实是 Object o = getObject(...);
,那么您必须从提供 getObject
成员函数的同一个 class 的成员函数内部调用它。
您说正在调用 const
重载;这意味着您在一个对象的 const
实例中(或者至少是一个 const 引用)。因此,您不能可靠地调用非常量函数。
您可以通过以下方式转换 const:
Object o = const_cast< TheClassName >(*this).getObject(...);
但这可能会导致未定义的行为。似乎还有一个更大的设计问题:一般来说,const 函数实际上 return 与非 const 函数不同的对象似乎是一个糟糕的主意。
(我假设它们 return 不同的对象,就好像它们 return 相同的对象那么你的原始代码就可以正常工作。
在我的代码中,我指定了两个函数做同样的事情,除了一个 returns const 对象并指定为 const:
const Object& getObject(...) const {...}
而另一个不是:
Object& getObject(...) {...}
当我尝试这样调用 getObject
时:
Object o = getObject(...);
它正在使用const版本,当我需要使用非常量时。我如何指定使用哪一个?
如果您真的想使用 getObject
返回的引用,您应该这样做
Object& o = getObject(...);
否则,使用Object o = ...
只会调用Object
复制构造函数。但是,此更改不会影响调用哪个 getObject
函数——这取决于包含 getObject
调用的对象是否为常量。
如果您的代码确实是 Object o = getObject(...);
,那么您必须从提供 getObject
成员函数的同一个 class 的成员函数内部调用它。
您说正在调用 const
重载;这意味着您在一个对象的 const
实例中(或者至少是一个 const 引用)。因此,您不能可靠地调用非常量函数。
您可以通过以下方式转换 const:
Object o = const_cast< TheClassName >(*this).getObject(...);
但这可能会导致未定义的行为。似乎还有一个更大的设计问题:一般来说,const 函数实际上 return 与非 const 函数不同的对象似乎是一个糟糕的主意。
(我假设它们 return 不同的对象,就好像它们 return 相同的对象那么你的原始代码就可以正常工作。