重复定义
#include <vector>
#include <string>
void dump(const std::string& key) {
}
void dump(const std::vector<std::string>& keys) {
}
int main(void) {
dump({"xxx", "yyy"});
}
主要原因是 std::string
存在一个如下的构造函数。
template< class InputIt >
basic_string(InputIt first, InputIt last, const Allocator& alloc = Allocator());
而 {"xxx", "yyy"}
使用上述的构造函数,虽然能够对应到具体的构造函数,但是行为实际未定义,所以需要显示声明。
process(std::vector<std::string>{"hello", "hey"});
详细可以参考 Stack Overflow 中的介绍。