如何解决将常量引用绑定到 C++ 中的文字
嗨,我正在阅读有关 C++ 中的 auto 和 const 的内容,并了解了 2 个示例。 2个例子如下:
auto &h = 42;
const auto &j = 42;
现在我的问题如下:
- 为什么在第一个示例中无法将普通引用绑定到文字并且此示例失败。我认为这是因为引用本身不是对象,它只是对象的另一个名称,并且由于文字 42 在内存中不作为对象存在,因此第一个示例失败。这是正确的吗?
- 第二个示例如何工作?我的意思是因为引用本身不是对象,但由于第二个示例正在运行,这是否意味着引用变量 j 被创建为对象?
- 因此,如果第二个示例正在运行,这是否意味着将来我想使用
int i=0;
创建变量而不是使用const auto &i=0
创建它?这会与 int i=0 产生相同的影响吗?
解决方法
- 为什么在第一个示例中无法将普通引用绑定到文字并且此示例失败。
因为语言规则说对非常量的引用不能绑定到右值。文字是纯右值。
- 第二个示例如何工作?
临时对象从纯右值中具体化,引用绑定到该临时对象,并且临时对象的生命周期延长以匹配引用的生命周期。
- 我想使用 int i=0 创建一个变量;相反,我可以使用 const auto &i=0 创建它吗?
注意不能通过const引用修改临时对象,而可以修改int
。因此,这些并不完全相同。此外,作为成员变量或参数,它们会有显着差异。
在某些情况下你可以,但你不应该因为它不必要地复杂。请记住,您对代码感到困惑。你不会是最后一个。更喜欢编写不会混淆其他人的程序。如果要使用 int i=0;
创建变量,请使用 int i=0;
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。