10

我有一个成员函数,它将常量引用参数传递给另一个对象。我想对这个参数进行 const_cast 以便在成员函数中轻松使用它。为此,以下哪个代码更好?:

void AClass::AMember(const BClass & _BObject)
{
    // FORM #1 - Cast as an object:
    BClass BObject = const_cast<BClass &>(_BObject);
    // ...
}

void AClass::AMember(const BClass & _BObject)
{
    // FORM #2 - Cast as a reference:
    BClass & BObject = const_cast<BClass &>(_BObject);
    // ...
}

你能比较一下这两种形式吗?哪个在速度和内存使用标准方面更好?

4

2 回答 2

17

第一个版本制作对象的副本。第二个版本没有。所以第二个版本会更快,除非你想复制。

顺便说一句,所有以下划线开头后跟大写字母的标识符都保留供编译器使用。您不应该使用像_BObject.

于 2011-11-04T02:36:10.430 回答
11

第一个没有任何意义,因为您抛弃了 constness ,_BObject以便稍后将其作为对BClass构造函数的常量引用传递并创建一个副本,BObject. 第二个做了它的意思 - 抛弃了常量并保留对原始对象的引用。所以如果你问我,第二个更好。请注意,尽管这const_cast并不总是安全的。

于 2011-11-04T02:36:39.917 回答