我可以通过引用传递参数的函数/方法和在C ++中通过值传递的重载吗?

在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,因为在C#中没有为此目的知道的关键字“ref”。 我在构造函数中尝试了它,其中名称必须与类相同(当然我可以添加一个无用的参数,但我想知道我是否不能这样做)。

顺便说一句,我用谷歌搜索,只有“通过参考和价值之间有什么区别?” 但没有像这样覆盖超载。 而且我想作为变通方法,我可以使用指针,感谢“取地址”( & ); 或者,如上所述,还有一个额外无用的参数。 但我想知道的是:我可以有这样的重载(通过ref / by value)吗?

提前致谢,

您可以通过为所需类型提供显式强制转换来在C ++中完成类似的操作。

 struct Foo { Foo(int /*bar*/) {} Foo(int &/*bar*/) {} }; int main() { int value = 5; Foo foo(static_cast(value)); return 0; } 

const将导致重载解析忽略构造函数采用非const引用,并将依赖于传递值。