作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
<分区>
对这个问题的思考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
不能以任何方式使用,但声明本身似乎是有效的。
假设我在 net.aserve 和 bordeaux-threads 之上构建了一个应用程序。我的包声明可能如下所示: (defpackage :my-package (:use :cl :net
我是一名优秀的程序员,十分优秀!