C ++ / CLI可选参数

时间:2012-04-25 12:45:10

标签: c++-cli optional-parameters

为什么我不能为托管类型或泛型函数的成员函数声明默认参数? C# 4.0介绍了Named and Optional Arguments; CLI有类似的事情吗?

我不明白为什么不可能声明这样的方法:

void Optional(int argument = 0);

然后当我调用Optional();时,编译器此调用 转换为:Optional(0);

1 个答案:

答案 0 :(得分:10)

看起来C ++ / CLI编译器没有为此发出正确的IL指令。它不会发出指令.param [1] = int32(0),C#用它来识别默认参数。如果在ILDasm中打开生成的程序集,您将看到它。

编译的方法是使用Optional命名空间中的属性DefaultParameterValueSystem::Runtime::InteropServices,但C#不会将这些用于默认参数,所以目前没有简单的方法来创建一个过载。

您可以在此处找到询问这些属性的问题:https://stackoverflow.com/a/4974528/93652