哪个是正确的:vector<const string> 还是 const vector<string>?

7
哪个是正确的:vector<const string>还是const vector<string>
我想创建一个std::vector,其中包含std::string,并且我不会对其进行更改。但我不确定哪种方法更好,以及为什么。

4
这些字符串是固定的,还是向量? - stark
@stark 嗯,有趣的问题。好的,我理解你的意思了。我不会向向量添加新元素。我想用几个字符串进行初始化,然后它将保持不变。 - user3111311
总有const vector<const string>。当然,只有在需要vectorstring的API时才需要这么麻烦;如果不需要,可以使用const char* const [] - Mike DeSimone
2
std::vector<const std::string> 不应该编译通过,这使得这个问题很容易... - Mooing Duck
1个回答

22
如果你只有这两个选择,并且希望程序能够编译通过,请使用 const std::vector<std::string>
如果你不介意编译错误(包括在 GCC4.8Clang 上),那么可能是因为 const std::string 不符合 CopyAssignable (C++11 之前) 或 MoveAssignable (C++11 及以后) 的要求,虽然从 表面上看,主要是因为它不是Destructible的原因,就可以使用 std::vector<const std::string>

2
实际问题是const std::string不是Destructible,这可以从编译器错误消息中看出,它抱怨缺少有效的operator delete:"no matching function for call to 'operator delete(const std::basic_string<char>*&)"。理论上,您可以为不是CopyAssignableMoveAssignableT声明std::vector<T>,只要您不尝试放置任何元素即可(在Coliru上演示)。 - Casey
1
最好的方法是如何获得可变的const string向量呢? - yuyoyuppe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接