在C#中,这肯定是可能的,因为这个可编辑的例子可以显示:
static void Teste(int x) { }
static void Teste(ref int x) { }
static void Teste()
{
int i = 0;
Teste(i);
Teste(ref i);
}
但是可以使用构造函数在C ++(/ CLI)中完成吗?请参阅以下示例:
class Foo
{
Foo(int bar)
{
// initializing "Foo" instance...
}
Foo(int &bar)
{
// initializing "Foo" instance...
}
//...
}
虽然这个类确实使用这些构造函数进行编译,但我无法看到当我应用另一个时如何选择,也就是说,调用是ambiguos,因为没有关键字我知道为此目的为“ref”in C#。我在构造函数中尝试了它,其中名称必须与类相同(当然我可以添加一个无用的参数,但我想知道我是否可以不这样做。)
顺便说一句,我用谷歌搜索,只有“通过参考和价值之间有什么区别?”但没有像这样覆盖超载。而且我想作为变通方法,我可以使用指针,这要归功于“取地址”(&
);或者,如上所述,还有一个额外无用的参数。但我想知道的是:我可以有这样的重载(通过ref / by value)吗?
提前致谢,
答案 0 :(得分:1)
通过为所需类型提供显式强制转换,您可以在C ++中完成类似的操作。
struct Foo
{
Foo(int /*bar*/) {}
Foo(int &/*bar*/) {}
};
int main()
{
int value = 5;
Foo foo(static_cast<const int&>(value));
return 0;
}
转换为const
将导致重载解析忽略构造函数采用非const引用,并将依赖于传递值。