C++ 中 std::vector存储const型对象报错
来源:互联网 发布:淘宝双十一打几折 编辑:程序博客网 时间:2024/05/21 18:41
今天在写c++程序时遇到了一个问题,声明了一个vector对象
std::vector<const std::string> str_vec;
结果程序编译报错:
此错误主要是vector中声明了const类型,此处vector<T>
中的T应该是拷贝赋值的(CopyAssignable),因此不能使用const类型。
以下代码则会报上述错误
#include <iostream> 2 #include <vector> 3 4 int main(){ 5 std::vector<const std::string> str_vec; 6 std::string str1 = "hello"; 7 std::string str2 = "world"; 8 str_vec.emplace_back(str1); 9 str_vec.emplace_back(str2); 10 for (auto item : str_vec) { 11 std::cout << item << std::endl; 12 } 13 return 0; 14 }
若改成
#include <iostream> 2 #include <vector> 3 4 int main(){ 5 std::vector<std::string> str_vec; 6 std::string str1 = "hello"; 7 std::string str2 = "world"; 8 str_vec.emplace_back(str1); 9 str_vec.emplace_back(str2); 10 for (auto item : str_vec) { 11 std::cout << item << std::endl; 12 } 13 return 0; 14 }
则没有问题。
另外,若使用const指针是没有问题的,因为const指针是指向的对象不能改变,指针本身是可以拷贝,赋值的。即以下代码没有问题:
#include <iostream> 2 #include <vector> 3 4 int main(){ 5 std::vector<const std::string*> str_vec; 6 std::string str1 = "hello"; 7 std::string str2 = "world"; 8 str_vec.emplace_back(&str1); 9 str_vec.emplace_back(&str2); 10 for (auto item : str_vec) { 11 std::cout << *item << std::endl; 12 } 13 return 0; 14 }
另,我是在gcc编译器下编译的,网上有说vs编译器下没有问题。
阅读全文
0 0
- C++ 中 std::vector存储const型对象报错
- const vector *&vector_pointer报错
- C++-std::Vector
- 【c++】std vector的介绍
- 关于编译报错 error: cannot convert ‘const std::__cxx11::basic_string’ to ‘const char*’ 的处理
- C++中 std::vector用法
- 对象引用前加const 报错
- c++;对象引用前加const报错:不能将“this”指针从“const a”转换为“a &”
- C/C++字符串处理(4):std::vector与std::StringBuilder
- C/C++字符串处理:std::vector与std::StringBuilder
- 【c++】std:vector介绍及方法
- C++ - 标准异常报错(call to 'std::exception::exception(const char [n])')
- [C++]char* const char* std::string区分
- 关于编译报错 error: cannot convert 'const std::__cxx11::basic_string<char>' to 'const char*' 的处理
- STL中vector iterators imcompatible报错
- 关于从std::vector中删除std::string的方法
- std::vector中erase的用法误区
- std::vector中erase函数的用法
- 打印日历
- 玲珑杯oj-1126咸鱼旅行
- 剑指offer-25-js-复杂链表的复制
- 第二十五天 面试总结
- Cows and Cars UVA
- C++ 中 std::vector存储const型对象报错
- Wooden Sticks HDU 1051
- MyBatis拦截器原理探究
- Sudoku Solver
- 数据库存储过程以及好处
- Spring 01
- Spring解析
- CSS知识点
- 1839: 恶搞指数