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

hkB*_*sai 7 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);
    // ...
}
Run Code Online (Sandbox Code Playgroud)

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

rob*_*off 13

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

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

  • C++标准,§17.4.3.1.2:"每个包含双下划线(__)或以下划线开头,后跟大写字母(2.11)的名称保留给实现用于任何用途."不要使用除非您正在实现编译器或标准库,否则保留标识符. (3认同)
  • 我不明白这与我的答案有什么关系. (3认同)

小智 10

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