gpt4 book ai didi

C# const int 和 const someStruct 之间的区别。为什么 const someStruct 不是 "compile-time constant"?

转载 作者:行者123 更新时间:2023-11-30 17:00:17 26 4
gpt4 key购买 nike

const Vector4 colorBlack = new Vector4(0,0,0,1);//Vector4 is struct
public static void example(Vector4 color = colorBlack) //not ok
{
//do something
}
const int someInt = 0;
public static void exampleInt(int n = someInt) // ok
{

}

我想知道“编译时常量”究竟是什么。来自 here它指出

It just means that every instance of the member marked as const will be replaced with its value during compilation, while readonly members will be resolved at run-time.

所以我假设如果我将 colorBlack 作为常量,那么它将是编译时常量,但编译器告诉我不是这样。但它不会提示“const int some int = 0;”是编译时常量。

为什么?

最佳答案

参见 Can I specify a default Color parameter in C# 4.0?

还有:Default arguments for structures

Section 7.15 中所述,常量表达式是可以在编译时完全计算的表达式。由于创建除字符串以外的引用类型的非空值的唯一方法是应用 new 运算符,并且由于常量表达式中不允许使用 new 运算符,因此引用类型常量的唯一可能值除字符串外为空。

也就是说,在编译时,你只能默认为:

  • 文字串
  • new T()//没有参数,或者等价于 default(T)

因为只有在使用默认参数时才可以使用 new,而不能使用引用类型(结构)这样做,并且因为无论如何都需要指定一些特定参数,所以唯一的选择是传递 null .

const Vector4 colorBlack = new Vector4(0,0,0,1);  // Vector4 is struct
public static void example(Vector4? color = null) // ? makes it nullable
{
if (color == null)
color = colorBlack;
}

关于C# const int 和 const someStruct 之间的区别。为什么 const someStruct 不是 "compile-time constant"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22420172/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com