gpt4 book ai didi

C++ 无处引用

转载 作者:太空狗 更新时间:2023-10-29 23:11:10 26 4
gpt4 key购买 nike

<分区>

对这个问题的思考Why can I initialize reference member with data member before initializing the data member?还有这个Why is initialization of a new variable by itself valid?我想到了以下奇怪的代码:

int main()
{
int &ri = ri;
ri = 0;
}

此代码编译 live demo ,我知道这是 UB,但只是想知道,编译器内部发生了什么,这个引用实际指向哪里?

更新:当该引用是全局引用时会发生不同的情况:godbolt , gcc 似乎将其声明为指针并使其指向自身

反对者注意:我知道这段代码是无效的,我不期望编译器有特定的行为,但我认为深入了解可能有助于理解为什么以下代码不是非法的以及引用在该语言中的工作方式:

struct foo {
int &ri = i;
int i = 0;
};

或者这个:

 extern int i;
int &ri = i;
int i = 0;

Update2:虽然赋值肯定是UB,这是一个很好的问题,如果声明本身:

int &ri = ri;

是不是UB。这似乎是纯粹的邪恶 - ri 不能以任何方式使用,但声明本身似乎是有效的。

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