我们如何使(确保)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/