代码之家  ›  专栏  ›  技术社区  ›  missingfaktor Kevin Wright

如何在C中声明局部常量?

  •  28
  • missingfaktor Kevin Wright  · 技术社区  · 15 年前

    如何在C中声明局部常量?

    与Java一样,您可以做到以下几点:

    public void f(){
      final int n = getNum(); // n declared constant
    }
    

    如何在C中做同样的事情?我试过了 readonly const 但似乎都不管用。

    任何帮助都将不胜感激。

    谢谢。

    7 回复  |  直到 6 年前
        1
  •  21
  •   Community CDub    7 年前

    在C中,不能创建从方法中检索到的常量。

    编辑:死链接 http://msdn.microsoft.com/en-us/library/e6w8fe1b(VS.71).aspx

    本文件有助于: https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/const

    常量表达式是可以在 编译时间。

        2
  •  12
  •   ZunTzu    10 年前

    将局部变量声明为迭代变量。迭代变量是只读的 (你没有要求很好的解决方案)。

    public void f() 
    {
      foreach (int n in new int[] { getNum() }) // n declared constant
      {
        n = 3; // won't compile: "error CS1656: Cannot assign to 'n' because it is a 'foreach iteration variable'"
      }
    }
    
        3
  •  6
  •   Tamas Czinege    15 年前

    我不知道为什么 readonly const 不适合你,因为这些是你需要的关键词。你用 康斯特 如果您有文本(数组文本除外),并且 只读 否则:

    public void f()
    {
        const int answer = 42;
    }
    
    private readonly int[] array = new int[] { 1, 2, 3, 4 };
    private readonly DateTime date = DateTime.Now;
    public void g()
    {
        Console.WriteLine(date.ToString());   
    }
    

    只读 只能在类级别上工作(也就是说,只能将其应用于字段)。也是由于 康斯特 需要一个文本,它本质上是静态的,而 只读 字段可以是静态的或实例的。

        4
  •  3
  •   Dave Cousineau    7 年前

    有一种解决方法需要重新分析。您不能获取只读局部变量,但至少可以检测变异的局部变量并对其进行不同的着色。

    使用字体和颜色项 Resharper可变局部变量标识符 .

    对我来说,我有当地人把灰色调成灰色,然后我为变化的变量选择了一个大胆的白色(这是一个黑暗的主题)。这意味着,与常规变量相比,任何写入多次的变量都会显示为明亮的。然后,您可以尽可能避免变量发生变化,或者如果方法确实需要一个变量,那么它至少会被突出显示。

        5
  •  2
  •   afk    6 年前

    截至2018-10-02,C中不可能有只读本地,但有一个开放的 proposal 对于正在进行的功能 discussion .

    这个 article 提供有用的摘要。

        6
  •  1
  •   Neil T.    15 年前

    在给出的示例中,需要将变量声明为 static ,因为您正在用方法调用初始化它。如果使用常量值初始化,如42,则可以使用 const . 对于类、结构和数组, readonly 应该工作。

        7
  •  0
  •   Johannes Rudolph    15 年前

    const关键字用于修改 字段或本地的声明 变量。

    MSDN .

    既然C不能执行“const改正”(比如C++),我认为它不是很有用。由于函数的作用域非常狭小,所以很容易不被忽略。