c# - 在 C++ 中,我可以有一个函数/方法通过引用传递一个参数,而一个重载通过值传递它吗?

标签 c# c++ c++-cli pass-by-reference pass-by-value

<分区>

在 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...
    }

    //...
}

尽管此类确实使用这些构造函数进行编译,但我看不出当我应用一个是另一个时如何选择,也就是说,调用是模棱两可的,因为我不知道用于此目的的关键字“ref” C#。我在构造函数中尝试过,其中名称必须与类相同(当然我可以添加一个无用的参数,但我想知道我是否可以这样做)。

顺便说一句,我在谷歌上搜索了一下,只得到了诸如“按引用传递和按值传递有什么区别?”之类的信息。但没有涵盖像这样的重载。而且我想作为解决方法我可以使用指针,这要归功于“获取地址”(&);或者如上所述,有一个额外的无用参数。但我想知道的是:我可以有这样的重载(通过引用/通过值)吗?

提前致谢

最佳答案

您可以通过提供对所需类型的显式转换来在 C++ 中完成类似的事情。

struct Foo
{
    Foo(int /*bar*/) {}
    Foo(int &/*bar*/) {}
};


int main()
{
    int value = 5;
    Foo foo(static_cast<const int&>(value));

    return 0;
}

转换为 const 将导致重载决策忽略采用非常量引用的构造函数,并将决定按值传递。

关于c# - 在 C++ 中,我可以有一个函数/方法通过引用传递一个参数,而一个重载通过值传递它吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16136223/

相关文章:

c# - XNA 3.1 与 SDL

c++ - 无法在 VS 2015 中编译 CUDA 代码

c++ - 嵌套子窗口的缺点?

c# - Entity Framework 核心 : default value when migrating nullable column to required

c# - 从 PointCollection 中检索成对的点?

c# - 使用 EZApi 和 OLEDBSource 自动映射列

c++ - QTabBar 选项卡大小不随样式表字体缩放

c++ - 从一个 C++ 程序中调用另一个程序中的方法(进程间通信)

interop - 如何将 C++/CLI 代码的某些部分编译为 native 代码,将某些部分编译为托管代码?

c++ - LNK 2022 : Inconsistent layout information, 迁移到VS2010后