gpt4 book ai didi

c++ - 混淆三种引用形式

转载 作者:太空宇宙 更新时间:2023-11-04 16:22:59 25 4
gpt4 key购买 nike

  T const&
const T&
T& const //error

以上三者有什么区别?如果 &*,会发生什么?

最佳答案

前两种形式是等价的,尽管我更喜欢第一种形式,因为它更容易推理模板参数推导,并且它阐明了什么是常量(它之前的所有内容):因此,int const* 优于 const int*

此外,没有办法用前缀语法声明一个常量指针(例如,没有 int* const 的等价物,其中 const 出现在方式)。因此,为了句法统一,我宁愿始终使用后缀版本。

第三种形式在常规上下文中使用时是错误的,它等同于推导模板参数时的T&(引用不能被重新赋值,所以它们在某种意义上总是常量,const 被认为是多余的)。

如果将 & 更改为 *,那么前两种形式仍然相同,而第三种现在声明一个常量指针指向T 类型的对象。请注意,这意味着指针本身是常量(您不能重新分配它),而不是所指向的对象。

int a = 0;
int b = 1;

int* const pA = &a; // p cannot be reassigned, a can be modified
*pA = 42; // OK
pA = &b; // ERROR

int const* pB = &b; // p can be reassigned, b cannot be modified
*pB = 42; // ERROR
pB = &a; // OK

int const* const pC = &a; // p cannot be reassigned, a cannot be modified
*pC = 42; // ERROR
pC = &b; // ERROR

int& const d = a; // ERROR

关于c++ - 混淆三种引用形式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15036199/

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