我有一个成员函数,它将一个常量引用参数带到另一个对象。我想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);
// ...
}
你能比较这两种形式吗?在速度和内存使用标准方面哪个更好?
答案 0 :(得分:13)
第一个版本制作了该对象的副本。第二个版本没有。所以第二个版本会更快,除非你想复制。
顺便说一下,所有以下划线后跟大写字母开头的标识符都保留供编译器使用。您不应该使用_BObject
等变量名称。
答案 1 :(得分:10)
第一个没有任何意义,因为你抛弃_BObject
的常量只是稍后将其作为对BClass
构造函数的常量引用传递并创建一个副本BObject
。第二个实现它的意思 - 抛弃constness并保持对原始对象的引用。所以,如果你问我,第二个更好。请注意const_cast
并不总是安全的。