【发布时间】:2013-10-01 18:00:31
【问题描述】:
vector<char *> 类型不能转换为 const vector<const char*>。例如,以下给出编译错误:
#include <vector>
using namespace std;
void fn(const vector<const char*> cvcc)
{
}
int main()
{
vector<char *> vc = vector<char *>();
fn(vc);
}
我理解为什么vector<char*> 不能转换为vector<const char*> - 可以将const char * 类型的额外成员添加到向量中,然后它们可以作为非常量访问。但是,如果向量本身是 const,则不会发生这种情况。
我最好的猜测是这将是无害的,但编译器无法推断这是无害的。
如何解决这个问题?
这个问题是由 C++ FQA here 提出的。
【问题讨论】:
-
改用迭代器。
-
vector<T>和vector<const T>是完全不同的类型。 -
远离 FQA。在那段中(和其他大多数人一样),他完全是个白痴——通过举一个需要even more complexity 才能工作的示例来抱怨复杂的类型系统。
-
类型安全等于好的代码等于避免程序员错误