C++11中的auto陷阱
来源:互联网 发布:临沂知豆租赁电话400 编辑:程序博客网 时间:2024/06/05 20:50
作者:dlite@163.com
C++11中引入的auto关键字自动推导类型特性,可能是最方便也最容易理解的特性了。然而,即使是这个简单特性,也有陷阱,需要我们使用时注意。
1、引用类型被推导为非引用类型
例如:
foo(void* arg) { if (arg) { auto big = *static_cast<MyBigClass*>(arg); ... }}上面的代码中big会被推导为MyBigClass类型,而不是MyBigClass&类型,从而导致拷贝构造发生。解决办法是使用auto&,即:
auto& big = *static_cast<MyBigClass*>(arg);
2、常量迭代器的推导
例如:
map <string, string> m; for (auto i = m.begin(); i != m.end(); ++i) { cout << i->second << " is " << i->first << endl; }
注意, m.begin() 返回类型是 iterator, 而不是 const_iterator, 因为这里的 m 并不是 const。C++11 中的 cbegin() 能够解决这个问题, 它返回 non-const 容器的 const 迭代器。
另外,为明确起见,也可以给auto可加入更多限定修饰。例如:
const auto& s = sys.Setting();
- C++11中的auto陷阱
- C++11中的auto陷阱
- C语言11中的auto和decltype
- C语言中的技术陷阱
- c语言中的陷阱1
- <C陷阱与缺陷>中的printf
- 浅析C/C++中的switch/case陷阱
- "C陷阱和缺陷"中的几个知识点
- "C陷阱和缺陷"中的几个知识点
- c语言题中的一些陷阱
- 浅析C/C++中的switch/case陷阱
- 浅析C/C++中的switch/case陷阱
- 浅析C/C++中的switch/case陷阱
- c语言题中的一些陷阱
- C/C++中的switch/case陷阱
- C“陷阱”
- C中的auto、static、register、extern、const和volitate
- C语言中的auto、 register、extern、static用法
- VC之回调函数示例
- 谈C/C++指针精髓(一)
- Https_Tomcat服务器端配置
- 谈C/C++指针精髓(二)
- sql server数字转字符,不带e+的科学记数
- C++11中的auto陷阱
- 职场经验17条,坚持下来了就是你的资本
- 内核中关链表的操作
- linux 安装fish shell
- 连线:苹果和Google已为便携式GPS设备吹响丧曲
- JTable小例子,表格中使用JComboBox
- MySQL 相关操作集锦
- No 141 · 格式化程序尝试对消息反序列化时引发异常
- adobe 出的支持http 快速定位的方法