gpt4 book ai didi

c++ - 在没有歧义的情况下是否允许通过引用重载函数?

转载 作者:可可西里 更新时间:2023-11-01 17:21:28 25 4
gpt4 key购买 nike

考虑以下代码:

#include <iostream>

void foo(int m);
void foo(int &k);

int main()
{
foo(5); // ok, because there is no ambiguity

int m = 5;
//foo(m); // compile-time error, because of ambiguity
foo(m + 0); // ok, because it's an expression of type int and not object's lvalue
}

void foo(int m)
{
std::cout << "by value\n";
}
void foo(int &k)
{
std::cout << "by reference\n";
}

我知道它为 foo(m) 引入了歧义,但是当表达式是 int 类型(或其他可以转换为 的类型时,这是允许的吗>int)?

我试图找到一些关于此的标准引用,但没有成功。


免责声明:请注意,它不是 Function Overloading Based on Value vs. Const Reference 的拷贝. const 引用是不同的,因为它们可以用 rvalues 分配,这与“普通”、非const 引用资料。

最佳答案

13.1 [over.load] 非常清楚(除了多页注释)关于哪些函数不能在同一范围内重载。

你的案例没有在那里列出,你可以声明那些重载,但你不一定能轻易使用它们。你可以这样调用左值:

void (*f)(int&) = foo;
f(m);

这避免了调用 foo(m) 时发生的歧义。

旁白:另一种编写foo(m + 0)的方法就是foo(+m),一元+运算符将左值到右值,因此调用了 foo(int) 重载。

关于c++ - 在没有歧义的情况下是否允许通过引用重载函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31453992/

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