c++ - 重载字符向量和字符串c ++时,对成员函数的调用不明确
问题描述
我想通过以下方式重载一个函数:
void f(string s){
cout << "String case" << endl;
}
void f(vector<char> v){
cout << "Vector case" << endl;
}
对于我插入字符串对象或向量对象的情况,一切都很好:
int main()
{
string s = "hello";
f(s); // Prints "String case"
vector<char> v = {'a', 'b'};
f(v); // Prints "Vector case"
return 0;
}
但是如果我想运行f({'a', 'b'});
,由于数组可以自动转换为字符串和向量,我得到error: call of overloaded ‘f()’ is ambiguous
. 假设我想把这种情况当作一个向量,我怎么能告诉编译器呢?
解决方案
明确说明大括号用于初始化的类型:
f(string{'a', 'b'});
f(vector<char>{'a', 'b'});
推荐阅读
- reactjs - 如何在反应原生博览会上每次在同一视图上倒计时
- node.js - 如何在 Node jS 中集成 OIDC Provider
- python - 是否可以在没有换行符的情况下获得用户输入(多行消息)
- python - 如何在 PyTorch 的损失函数中将张量的梯度作为参数传递?
- symfony - 多选下拉/复选框 Symfony 3.4 Form
- c++ - 捕获组标准 C++ RegEx 和 PCRE 中只有 1 个匹配项
- haskell - 在 Haskell 中应用特定类型变量的最短方法
- azure - Azure App service Keeps pulling docker image from docker hub
- vaadin - 无法让 @CssImport 仅适用于组件范围
- c# - C# 中的 SQL 更新没有显示错误,但也没有更新