int &r1 = r1; // r1 0 initialized, `r1` references 0, not UB?
int *p1 = p1; // p1 0 initialized, `p1` is a null ptr, not UB?
int main() {
int &r2 = r2; // reference to intermediate value. has UB ?
int &r3 = r2; // Also has UB ?
int *p2 = p2; // pointer to garbage location. has UB ?
int *p3 = p2; // Also has UB ?
return 0;
}
// namespace scope
int *p1 = p1; // p1 0 initialized, `p1` is a null ptr, not UB?
标准在这种情况下是模棱两可的,但“不是UB”可以合理地争论,因为静态初始化在动态初始化之前。另一方面,标准意味着对象的生存期还没有开始。
关于这里的二义性的更多细节:如果一个全局变量被初始化两次(静态,然后动态),哪个初始化开始它的生存期?
// block scope
int *p2 = p2; // pointer to garbage location. has UB ?
是的。与静态存储持续时间的情况不同,自动对象缺少静态初始化阶段,并且在初始化之前具有一个不确定的值。您正在使用这个不确定的值进行初始化,程序的行为是明确的未定义的。
// block scope
int *p3 = p2; // Also has UB ?
在p2
的初始化中,行为已经未定义。但假设p2
是一个不确定值,没有前面的ub:
int *p2;
int *p3 = p2;
这个例子的行为也是未定义的。
请注意,这些与对象是指针关系不大。这几乎适用于所有类型的对象。
必须初始化引用以引用有效的对象或函数。因此,这三个问题都是:
// namespace scope
int &r1 = r1; // r1 0 initialized, `r1` references 0, not UB?
// block scope
int &r2 = r2; // reference to intermediate value. has UB ?
int &r3 = r2; // Also has UB ?
使程序格式不正确。
因此,可以将自动变量初始化为陷阱表示,而不会导致未定义的行为,但在变量中存储适当的值之前,不能使用该变量的值。 事实上,他们两个我都听不懂。
当云联壹云的First Node部署成功后,用户可根据使用场景快速引导配置云联壹云平台。 设置管理员用户 当First Node节点部署完成后,用户在浏览器中输入First Node节点的IP地址,如提示“您的连接不是私密连接”,请单击 “高级” 按钮,并单击“继续前往x.x.x.x(不安全)”,打开云管平台控制台。 在管理员注册页面,设置管理员账号、密码,单击 “注册” 按钮,创建管理员用户。
这个问题的后续问题 我们有以下代码: 这种访问是一种未定义的行为吗?一方面,不需要对象来访问静态类成员,另一方面,
本文向大家介绍C++常量详解一(常量指针与常量引用的初始化),包括了C++常量详解一(常量指针与常量引用的初始化)的使用技巧和注意事项,需要的朋友参考一下 1、常量 1.1、常量的初始化: const对象一旦创建后其值就不能再改变,所以const对象必须初始化。这里我们要注意一点,像const int *p和const int &r都并不是const对象。因为const int *p只是表示不能通
我正在尝试使用Go将原型3结构发送到gRPC服务器。该结构具有类型,我似乎可以很好地填充它。当将消息发送到我的gRPC客户端时,我对感到恐慌。 我有原始定义(完整文件在https://github.com/MovingGauteng/geofancy-rs/blob/master/proto/geofancy.proto: 围棋代码是: 堆栈跟踪如下所示:
问题内容: 另一个链接的问题是在使用strcpy()时出现细分错误吗? 我有一个结构: 如何初始化指向上述类型结构的指针,以及如何初始化指向结构内部的10个字符串(incall [])的指针。 我首先初始化字符串,然后初始化结构。 谢谢。 编辑:我猜我用错了字,应该说分配。实际上,我将此结构作为线程的参数传递。线程数不是固定的,作为参数发送的数据结构对于每个线程都必须是唯一的,并且是“线程安全的”