gpt4 book ai didi

c++ bulid消息显示引用参数,而我按值传递参数

转载 作者:行者123 更新时间:2023-11-30 01:23:05 25 4
gpt4 key购买 nike

我在 Code::Blocks 下使用 GNU GCC 编译器。

    int foo(long s){cout<<"long"<<endl;return 0;}
int foo(float s){cout<<"float"<<endl;return 0;}

int main()
{
double a(3.2);
foo(a);
return 0;
}

我知道这会触发不明确的错误,但构建消息告诉我

error: call of overloaded 'foo(double&)' is ambiguous

我确实通过 double 变量的值传递参数,而不是像上面写的那样通过引用。

每当我使用 const double 时:

foo(3.2);  // enclosed in main function

构建消息告诉我这样的错误:

error: call of overloaded 'foo(double)' is ambiguous.

想知道为什么会这样。

double变量和const double的传递过程不一样吗?

提前致谢。

最佳答案

foo(long)foo(float) 都不完全适合您的参数。由于 double 也可以隐式转换 longfloat 调用是雄心勃勃的。

您可以为 double 提供额外的重载或使用适当的参数类型。

请注意,您的示例过于简单。以下代码将触发您的错误消息:

double bar = 3.2;
foo(bar);

这是因为 bar 是一个左值,而完美匹配是 double&。不过,如果您提供 foo(double) 重载,它只会接受此函数。

关于c++ bulid消息显示引用参数,而我按值传递参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15410056/

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