gpt4 book ai didi

c++ - 是否可以将常量引用转换为指针?

转载 作者:行者123 更新时间:2023-11-30 02:43:14 35 4
gpt4 key购买 nike

是否可以将常量引用转换为指针,如果可以如何转换?

这就是我假设 Actor 阵容应该是这样的:

const TypeFoo &someVal;
TypeFoo *pSomePtr = reinterpret_cast<TypeFoo*>(someVal);

示例无法编译,我终究无法理解原因。

最佳答案

您的代码:

const TypeFoo &someVal;
TypeFoo *pSomePtr = reinterpret_cast<TypeFoo*>(someVal);

这失败了,因为你错过了 C++ 中引用的关键点,可以总结为:

引用对象。

引用不应被视为一种特殊的指针。它没有指向任何东西。它是代码中的另一个名称。因此,您正在尝试转换 TypeFoo指向一个指针,这是不允许的,即使是 reinterpret_cast .您的编译器应该为以下代码发出完全相同的错误:

const TypeFoo someVal = /* ... */;
TypeFoo *pSomePtr = reinterpret_cast<TypeFoo*>(someVal); // error

如果你需要 TypeFoo * , 然后你可以获取你的对象的地址:

const TypeFoo &someVal = /* ... */;
const TypeFoo *pSomePtr = &someVal;

(不要让语法混淆你。& 在这两行代码中起着完全不同的作用。)

注意指针必须是指向const的指针, 因为对象是 const , 也。如果您需要非 const指针,但有一个 const对象,那么你将面临一种全新的问题,可以用 const_cast 解决。如果您很幸运并且只处理一个糟糕的 API,或者如果您要使用的代码需要修改对象,则可能需要更彻底的重新设计。

此外,如果您获取对象的地址,则适用通常的注意事项;最重要的是,获取本地对象的地址,保留它并稍后在对象已经被销毁时取消引用它,会导致未定义的行为。

关于c++ - 是否可以将常量引用转换为指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26317901/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com