C++ 重载决议总是求助于别名 arg。超过其他人作为arg。对所有人有效

标签 c++ function overloading

我们如何使(确保)C++ 重载解析始终求助于别名 arg。比正常的 arg.,所以例如必选

int func(string& s) {
// ...
}

结束

int func(string s) { //...
}

什么时候参数对双方都有效?
谢谢

最佳答案

如果参数对两者都有效(例如std::string),那么代码将不会编译(GCC9.2)因为歧义

error: call of overloaded 'func(std::string&)' is ambiguous

https://gcc.godbolt.org/z/qbvrAR

如果您传递 const char* 或其他可默认构造为 std::string 的东西,那么获取字符串拷贝的函数将是叫。 https://gcc.godbolt.org/z/DGSuEz

(我不知道)没有办法告诉编译器他应该更喜欢引用函数而不是复制。您可以在我试图显式调用引用的地方查看此代码段,但由于歧义,编译再次失败: https://gcc.godbolt.org/z/gZSdyj

关于C++ 重载决议总是求助于别名 arg。超过其他人作为arg。对所有人有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59101737/

相关文章:

c++ - “无匹配函数”-尝试插入集合时出错 (c++)

c# - 两个相似的重载?或者一个重载调用另一个?

java - java中的方法无法应用于给定类型错误

c++ - C++ 模板函数的重载

c++ - 如何在 C++ 中返回 Null 作为引用?

c++ - 如何对占用网格进行下采样?

python - Lambda 函数 - 参数数量未知

php - 创建 Php 函数以返回 css 类

c++ - GDBM 顺序访问 : bug?

c++ - C++ 中的类成员隐私和 header