gpt4 book ai didi

c++ - C++ 中的函数重载按值或按引用传递参数

转载 作者:可可西里 更新时间:2023-11-01 14:57:31 29 4
gpt4 key购买 nike

如果我们在 C++ 中有这个示例函数代码

void foo(int x)  { std::cout << "foo(int)"   << std::endl; }
void foo(int& x) { std::cout << "foo(int &)" << std::endl; }

是否可以通过对调用参数进行任何修改来区分要调用的函数?

如果以这些方式中的某些方式调用函数 foo:

foo( 10);

i = 10;
foo( static_cast<const int>(i));

foo( static_cast<const int&>(i));

它被称为第一个 foo 重载函数,因为它不能通过引用将 const 参数传递给非 const 参数。但是,您将如何调用第二个 foo 重载函数?如果我用下一种方式调用:

int i = 10;
foo( i);

它发生了一个不明确的错误,因为这两个函数对于这个参数都是有效的。

在此链接中https://stackoverflow.com/a/5465379/6717386它解释了一种解决它的方法:使用对象而不是内置类型并私有(private)化复制构造函数,因此它不能复制对象值,它必须调用第二个 foo 重载函数并通过传递对象引用。但是,内置类型有什么办法吗?我必须更改函数名称以避免重载吗?

最佳答案

你可以做一个(函数的)转换来选择重载函数:

static_cast<void (&)(int&)>(foo)(i);

Demo

关于c++ - C++ 中的函数重载按值或按引用传递参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38957516/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com