c++11 auto
2024-08-30 16:05:01
auto 关键字指示编译器使用已声明变量的初始化表达式或 lambda 表达式参数来推导其类型。
在大多情况下,建议您使用 auto 关键字(除非您确实需要转换),因为此关键字可提供以下好处:
可靠性:如果表达式的类型发生更改(包括函数返回值发生更改的情况),它也能工作。
性能:确保将不会进行转换。
可用性:不必担心类型名称拼写困难和拼写有误。
效率:代码会变得更高效。
可能不需要使用 auto 的转换情况:
当需要特定类型且不需要执行任何其他操作时。
表达式模板帮助程序类型(例如,(valarray+valarray) 和初始值设定项列表),尽管您很少选择编写 auto x = { 1 }; 并实际需要获取 int.
你应该注意到,auto并不能作为函数的返回类型,但是你能用auto去代替函数的返回类型,当然,在这种情况下,函数必须有返回值才可以。auto不会告诉编译器去推断返回值的实际类型,它会通知编译器在函数的末段去寻找返回值类型。在下面的那个例子中,函数返回值的构成是由T1类型和T2类型的值,经过+操作符之后决定的。 template <typename T1, typename T2> auto compose(T1 t1, T2 t2) -> decltype(t1 + t2) { return t1+t2; } auto v = compose(, 3.14); // v's type is double
C++11加强了for语句的功能,以更好的支持用于遍历集合的“foreach”范式。在新的形式中,用户可以使用for去迭代遍历C风格的数组、初始化列表,以及所有非成员begin()和end被重载的容器。当你仅仅想获取集合/数组中的元素来做一些事情,而不关注索引值、迭代器或者元素本身的时候,这种for的形式非常有用。 std::map<std::string, std::vector<int>> map; std::vector<int> v; v.push_back(); v.push_back(); v.push_back(); map["one"] = v; for(const auto& kvp : map) { std::cout << kvp.first << std::endl; for(auto v : kvp.second) { std::cout << v << std::endl; } } ,,,,}; for(int& e : arr) { e = e*e; }
最新文章
- vc11(vs2012)下编译php
- 深入理解JVM内存模型
- 新浪微博客户端(5)-自定义UISearchBar
- Android自定义progressBar
- JAVA定时执行任务的三种方法
- wp ApplicationBar
- 【Qt】Qt Creator快捷键【转】
- 基础数据结构 之 树(python实现)
- VisualStudio自定义代码段_方法一
- 网易云课堂_C++开发入门到精通_章节7:模板
- Nginx 变量漫谈(六)
- 跨语言时区处理与Epoch
- Python 语法1
- linux服务器后台运行服务
- Thinkphp 中的自动验证 上一篇有例子
- Hadoop框架之HDFS的shell操作
- 多线程学习笔记四之Condition实现分析
- flink-jdbc sink
- setTimeout()的应用
- .NET&;C#的异常处理
热门文章
- uva12489 Combating cancer(树同构)
- Sicily 1323. Switch text
- [Leetcode][020] Valid Parentheses (Java)
- linux内核学习之一:环境搭建--安装Debian7.3
- UILabel自适应高度和自动换行
- [UVALive] 6492 Welcome Party(最小点覆盖)
- VIM下Express jade空格问题:expected ";indent";, but got ";newline";
- cf C. Matrix
- cf B. Flag Day
- 使用CPU的AVX指令