auto用法
2024-10-20 08:55:43
在C++11中,如果编译器在定义一个变量的时候可以推断出变量的类型,不用写变量的类型,你只需写auto即可。
第一种用法:自动推到内置类型
int x = 100;
//C++ 11
auto x = 100;
第二种用法:自动推导模版和迭代器类型
vector<int> vec;
auto iter = vec.iterator();
第三种用法:用于模版
template <typename BuiltType, typename Builder>
void makeAndProcessObject(cosnt Builder& builder)
{
BuiltType val = builder.makeObject();
//do something
}
上面的代码,我们看到这里需要两个模板参数:一个是Builder对象的类型,另一个是Builder创建出的对象的类型。糟糕的是创建出的类型无法被推导出,所以每次你必须这样调用:
MyObjBuilder builder;
makeAndProcessObject<MyObjBuilder>(builder);
使用C++ 11后的修改为:
template <typename Builder>
void makeAndProcessObject(const Builder& builder)
{
auto val = bulder.makeObject();
//...
} MyObjBuilder builder;
makeAndProcessObject(builder);
auto:引用、指针和常量
下面要确定的一个问题是auto如何处理引用:
int& foo()
auto bar = foo(); //int& or int
答案是在C++11中,auto处理引用时默认是值类型,所以下面的代码bar是int。不过你可以指定&作为修饰符强制它作为引用:
int& foo();
auto bar = foo(); // int
auto& baz = foo(); //int&
不过,假如你有一个指针auto则自动获取指针类型:
int* foo();
auto p_bar = foo(); // int*
但是你也可以显式指定表明变量是一个指针:
int* foo();
auto *p_bar = foo(); // int*
当处理引用时,你一样可以标记const,如果需要的话:
int& foo();
const auto& baz = foo(); //const int&
或者指针:
int* foo();
const int* const_foo();
const auto *p_bar = foo(); // const int*
auto p_bar = const_foo(); // const int*
原文博客: http://towriting.com/blog/2013/08/08/improved-type-inference-in-cpp11/
最新文章
- JS.中文乱码,Jsp\Servlet端的解决办法
- IOS开发基础知识--碎片8
- Windows无法启动SQL server 代理服务(服务器)错误1067:进程意外终止
- 开始学习<;p>;标签,添加段落
- 获取客户端IP地址定位城市信息
- 2014第3周三JS进阶书籍
- hdoj 2102 A计画 【BFS】
- Mybatis异常There is no getter for property named &#39;XXX&#39; in &#39;class com.xxx.xxx.UserAccountDTO
- 解决 Intellij IDEA Cannot Resolve Symbol ‘XXX’ 问题
- 调用Bytom Chrome插件钱包开发Dapp
- Celery 1
- C# 之 提高WebService性能大数据量网络传输处理
- weblogic之CVE-2018-3246 XXE分析
- 20145326 《Java程序设计》第8周学习总结
- vue-vuex安装
- rosbag数据记录及转换图片、视频
- jquery延时刷新
- vue过渡动画效果
- dd-wrt ddns更新失败由于电信提供的ip不是公网ip
- quick sort去除无用判断
热门文章
- python面试题——基础篇(80题)
- Android开发之——依赖冲突Program type already present
- 【起航计划 025】2015 起航计划 Android APIDemo的魔鬼步伐 24 App->;Notification->;Notifying Service Controller service中使用Notification
- Java—包装类、Date和SimpleDateFormat、Calendar类
- DVB数字电视常见信号指标解释
- vos对接时业务确认及信息安全责任承诺书
- Bonita portal 源码编译(未完成)
- express不是内部命令
- selenium项目--读取测试用例
- 火车进站输出路径(HDU1022)