c++中的auto、const auto&

先介绍一下auto、const:

在块作用域、命名作用域、循环初始化语句等等  中声明变量时,关键词auto用作类型指定符。

const:修饰符

接下来我们细细分析一下:

(1)auto

auto即 for(auto x:range)  这样会拷贝一份range元素,而不会改变range中元素;

但是!(重点)  使用for(auto x:vector<bool>)时得到一个proxy class,操作时会改变vector<bool>本身元素。应用:for(bool x:vector<bool>)

(2)auto&

当需要修改range中元素,用for(auto& x:range)

当vector<bool>返回临时对象,使用auto&会编译错误,临时对象不能绑在non-const l-value reference (左值引用)需使用auto&&,初始化右值时也可捕获

(3)const auto&

当只想读取range中元素时,使用const auto&,如:for(const auto&x:range),它不会进行拷贝,也不会修改range

(4)const auto

当                                                                                                                                                                                                                                                                     需要拷贝元素,但不可修改拷贝出来的值时,使用 for(const auto x:range),避免拷贝开销

整理一下:

想要拷贝元素:for(auto x:range)

想要修改元素 :  for(auto &&x:range)

想要只读元素:for(const auto& x:range)

原文地址:https://www.cnblogs.com/Nothing-9708071624/p/10167982.html

时间: 2024-11-08 21:54:02

c++中的auto、const auto&的相关文章

c++11中新型for循环,auto, 类成员的初始化及左右值引用

#include <typeinfo> #include <iostream> #include <string> #include <vector> #include <iterator> static void autoValue(); static void autoPointer(); static void newVersionFor(); static void newVersionConstruct(); static void d

《Linux内核Makefile分析》之 auto.conf, auto.conf.cmd, autoconf.h【转】

转自:http://blog.sina.com.cn/s/blog_87c063060101l25y.html 转载:http://blog.csdn.net/lcw_202/article/details/6661364 在编译构建性目标时(如 make vmlinux),顶层 Makefile 的 $(dot-config) 变量值为 1 . 在顶层 Makefile 的 497-504 行看到: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

c与c++中的extern const的区别和联系

最近复习c++,发现了这个东西. c语言里面,我们在一个.c文件中用const定义了一个全局变量后,可以在另一个.c文件中用extern const来引用,但在c++中在链接的时候会报undefined reference错误,这是因为在c语言里面,const全局变量在符号表里面是GLOBAL即全局可见的,而在c++里面却是LOCAL即只能在当前编译模块可见. e.g. 在a.h中: 1 extern const int a; 在a.c中: 1 const int a = 10; 在main.c

面试时面试官想要听到什么答案 关于es6中let、const、promise、块级作用域的问题

前言 前面写了一篇关于vue方面问题的面试题(面试时面试官想要听到什么答案(关于一些vue的问题)),感谢大家的阅读和意见,今天整理了一下我面试时经常会问到的一些关于es的问题,写了这篇文章,感谢拨冗翻阅拙作,敬请斧正.因为最近比较忙es6的问题就写了这些,写的比较水了,这些也是我比较常问的还有一些比较碎的内容面试问了但本文未体现只挑选了重点的,class和symbol也是两个重点,因为我了解不深所以就没有去问这两个 - -下面进入正文,本文会列举一些平时面试时问到的问题和答案,并说明我在当时问

iOS中关于UI的auto layout问题

2016-04-08第一次接触到iOS的UI开发, 跟着老师的视频写了一个移动控件的小程序, 结果因为没有看完视频导致出错, 具体过程如图: 发现, 无论怎么点击btn2, 都无法让btn1左移, 而具有相同功能的btn3就能正常的让btn1左移 问题出现的原因很简单, 在新建proj的时候没有关闭auto layout所致, 关掉即可 先调处属性栏, 点击btn2, 跳转到btn2的属性页面, 再点击File Inspector, 在上图所示区域, 取消勾选 Use Auto Layout,

在Mac上自动启动VirutalBox中的虚拟机 (Auto start VirtualBox VM in mac OSX)

Auto start VM in mac OSX(10.15) 1. Install VirtualBox(6.1.4)        2. Copy file "/Applications/VirtualBox.app/Contents/MacOS/org.virtualbox.vboxautostart.plist" to "/Library/LaunchDaemons"        3. Edit the file "/Library/LanchD

ECMAScript 6中let和const详解

1:Let命令 (1)Let定义块级作用域的变量,var定义的变量会提升.Let不会提升.如下.可以先用是undefined但是let在定义之前是不能用的.会报错Uncaught ReferenceError: letter is not defined(-) console.log(color) console.log(letter) var color = 'red'; let letter = 'a' 只要块级作用域内存在let命令,声明的变量不受外部影响. var tmp = 123;

[转]delphi中array of const 借鉴

原文地址:http://blog.163.com/[email protected]/blog/static/16526275820114995153163/ Delphi中关于 array of const 变体开放数组参数 .           变体开发数组参数允许向单个过程或函数传递不同类型表达式的数组.要定义含有变体开放数组参数的例程,需要指定array     of     const作为参数类型.如,       procedure     DoSomething(A:     a

OC中extern,static,const的用法

1.const的作用: const仅仅用来修饰右边的变量(基本数据变量p,指针变量*p). 例如 NSString *const SIAlertViewWillDismissNotification;修饰的是SIAlertViewWillDismissNotification 被const修饰的变量是只读的 2.static的作用: 修饰局部变量: 1.延长局部变量的生命周期,程序结束才会销毁. 2.局部变量只会生成一份内存,只会初始化一次. 3.改变局部变量的作用域. 修饰全局变量 1.只能在