有效地const_cast-an恒定参考参数

时间:2011-11-04 02:32:06

标签: c++ parameters reference constants const-cast

我有一个成员函数,它将一个常量引用参数带到另一个对象。我想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);
    // ...
}

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

2 个答案:

答案 0 :(得分:13)

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

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

答案 1 :(得分:10)

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