C/C++ 常见错误整理

2015-12-22 language c/cpp

重复定义

#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 中的介绍。