【发布时间】:2014-04-20 15:21:25
【问题描述】:
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 声明
这只是意味着标记为 const 的成员的每个实例将在编译期间替换为其值,而 readonly 成员将在运行时解析。
所以我假设如果我将 colorBlack 作为 const,那么它将是编译时常量,但编译器会告诉我不然。 但它不会抱怨“const int some int = 0;”是编译时常量。
为什么?
【问题讨论】:
-
编译器是怎么说的?
-
@deviantfan 'color' 的默认参数值必须是编译时常量
-
编译器如何在编译时知道 colorBlack 的值?您需要运行 Vector4 构造函数才能找到它的值。
-
@DmitryDovgopoly 但不应该让“const”在编译时调用构造函数?这就是答案所说的“标记为 const 的成员将在编译期间被其值替换”然后我想我的阅读答案是错误的?
-
编译器无法运行程序。代码只能在您启动程序时运行。您可以在 J.Richter 的
CLR via C#中了解更多信息