为什么结构声明不会发生名称冲突

Why is no name collision occuring with struct declaration

本文关键字:冲突 结构 声明 为什么      更新时间:2023-10-16

我创建了一个结构:

struct number_struct
{
    int i;
    float f;
} struct_a;

因此struct_a属于number_struct类型。

稍后在 int main 中我写道:

number_struct struct_a = { 0 };
number_struct struct_b = { 0 };

令人困惑的是,由于我已经声明了两次struct_a,我希望来自视觉工作室的消息说它已被声明了两次,也就是名称冲突。为什么不会发生这种情况?如果我声明两次struct_b但在主例程中,确实会发生。

除此之外,如果我在不初始化结构的情况下执行以下操作:

std::cout << struct_a.i << "t" << struct_b.i << std::endl;
std::cout << struct_a.f << "t" << struct_b.f << std::endl;

我收到一个运行时错误,指出在没有初始化的情况下使用了 sturct。为什么编译器不自动将结构(和标准类型变量)初始化为 0?

struct number_struct {
    int i;
    float f;
} struct_a;

在全局范围内创建number_struct的实例。然后,在 main 中创建 number_struct 的实例,这将隐藏在全局范围内创建的实例。 要访问全局作用域中的实例,请使用作用域解析运算符 ::struct_a

至于运行时错误,您编译的版本是什么? 该标准说将全局变量初始化为 0(并不是说你不应该显式初始化自己)。