代码之家  ›  专栏  ›  技术社区  ›  Ben Aston

将局部变量声明为常量

  •  7
  • Ben Aston  · 技术社区  · 15 年前

    显然,将局部变量声明为 const Const 实例变量是静态的(我相信)。这是否有任何关系的性质和用途 常数 局部变量(e、 g.螺纹)

    7 回复  |  直到 15 年前
        1
  •  12
  •   Adrian Godong    15 年前

    A const 不是变量,所以叫常数。

        2
  •  13
  •   sthalik    15 年前

    “const”变量必须具有基元类型(例如int、bool)。每当源代码中出现一个“const”变量(无论是本地变量还是全局变量)时,这个实例就会被const值本身替换。所以:

    const int foo = 42;
    return foo + 69;
    

    return 42 + 69
    

    或者更确切地说:

    return 111;
    

        3
  •  11
  •   Guffa    15 年前

    常量不是变量,它实际上也不存储在任何地方。因为它不是存储的,所以它不是实例成员,也不是静态的。

    常量只是一个值的名称。编译代码时,会在使用常量的位置插入值(如果使用在不同程序集中声明的常量,则会产生影响。在重新编译使用常量的代码之前,更改常量的声明值不会更改使用的值。)

        4
  •  4
  •   Community CDub    5 年前

    我需要插嘴说,我觉得已经给出的共识答案并不完整。

    const int foo = 42;
    

    但是,如果常量“变量”是使用(可能是复杂的)常量表达式声明的,则该答案回避了出现的问题,例如:

    const double H = 1.23e-2, Q = 7.65e-4, nu = 0.3;
    const double Reynolds = H*H*H*H / Q / (1d - nu);
    

    在这种情况下,编译器是否评估表达式一次,并将结果存储(用于存储)以重用(如静态变量),或者每次使用标识符执行表达式(如C/C++中的“定义宏”),这就不同了。

    在我自己的闲逛中,我发现下面的描述 http://www.techopedia.com/definition/3768/constant-c 这说明了这个问题:

    在C#的上下文中,常量是一种字段或局部变量,其值在编译时设置,在运行时永远不能更改。它与变量类似,有名称、值和内存位置。但是,它与变量的不同之处在于,它的特性是在应用程序中只初始化一次。常量是使用关键字“const”声明的。

    诚然,“内存位置”部分是一种延伸——我认为这意味着const值在编译期间存储在本地的某个地方。如前所述,您不能在代码中访问或引用此内存。否则,这似乎与我在C语言规范中读到的一致:

    8.5.2局部常数声明

    A 局部常量声明

    局部常量声明:

    常量类型 {常量声明符,}常量声明符

    常量声明符:

    标识符=常量表达式

    以及:

    7.19常量表达式

    A 是一个可以在编译时完全计算的表达式。

    常量表达式:

    ...

    欢迎对此“quanser”的任何反馈:^)

        5
  •  3
  •   codymanix    15 年前

    在c#中将局部变量创建为const根本不会创建任何变量或字段,而是将指定的常量值放在方法中使用它的任何地方。

        6
  •  2
  •   Janick Bernet    15 年前

    本地使用的主要优点 const

        7
  •  -3
  •   Community CDub    8 年前

    我也把这个贴到 Why can't I declare a constant using var in C#?

    不带变量的常量:

    const int Value1 = 1;
    const int Value2 = 2;
    

    具有var的常量(创建后不能更改匿名类型属性值):

    var constants = new { 
      Value1 = 1, 
      Value2 = 2,
    };
    //use as constants.Value1
    
    推荐文章