代码之家  ›  专栏  ›  技术社区  ›  mgamer

.NET中用户创建的结构和框架结构之间的差异

  •  7
  • mgamer  · 技术社区  · 14 年前

    为什么C编译器不允许您编译:

    int a;
    Console.WriteLine(a);
    

    但允许您编译:

    MyStruct a;
    Console.WriteLine(a);
    

    其中MyStruct定义为:

    struct MyStruct
    {
    
    }
    

    更新:在第一种情况下,错误是:

    错误1使用未分配的本地 变量“a”

    3 回复  |  直到 7 年前
        1
  •  11
  •   Ani    14 年前

    C不允许从未初始化的本地文件读取。这是从 language specification 在这种情况下适用:

    5.3明确的任务

    ...

    考虑结构类型变量 明确指定 如果每个 考虑实例变量 明确指定。


    显然,由于您的结构没有字段,这不是问题;它被认为是绝对分配的。向其添加字段将破坏生成。

    有点相关:

    11.3.8施工人员

    在所有字段之前,不能调用实例成员函数 正在构造的结构的 已经明确分配了。

        2
  •  4
  •   Steve Townsend    14 年前

    这是因为 int 局部变量(与 内景 作为类或结构成员)没有默认值。这个 struct 示例中的输出只起作用,因为它没有成员。

    讨论的默认值 here .

    这将起作用:

    struct MyStruct
    {
        int c;
    }
    
    int a = new int();
    MyStruct b = new MyStruct();
    
    Console.WriteLine(a);
    Console.WriteLine(b);
    
        3
  •  2
  •   Otávio Décio    14 年前

    编译器根本不喜欢在初始化之前使用整数这一事实。

    Error   5   Use of unassigned local variable 'a'