有效地 const_cast-ing 常量引用参数

发布于 2024-12-14 00:52:50 字数 478 浏览 0 评论 0原文

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

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

I have a member function which takes a constant reference parameter to another object. I want to const_cast this parameter in order to easily use it inside the member function. For this purpose, which of the following codes is better?:

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);
    // ...
}

Can you please compare these two forms? Which one is better in criteria of speed and memory usage?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

说好的呢 2024-12-21 00:52:51

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

The first one doesn't make any sense as you cast away constness of _BObject to only later pass it as a constant reference to BClass constructor and create a copy, BObject. The second one does what it means - casts away the constness and keeps the reference to the original object. So if you ask me, the second one is better. Be aware though that const_cast is not always safe.

拥抱影子 2024-12-21 00:52:50

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

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

The first version makes a copy of the object. The second version doesn't. So the second version will be faster unless you want to make a copy.

By the way, all identifiers that start with an underscore followed by a capital letter are reserved for use by the compiler. You should not be using variable names like _BObject.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文