首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C++_ ‘&‘ 引用详解

引用: 引用是对一个变量 或 对象(后期讲解) 取的别名, 当引用初始化为某个变量, 便可以使用该引用名称或变量名称来指向此变量. 1.引用的定义: 定义别名方式: 真名的类型 & 别名 = 真名..., 引用可以引用指针类型变量, 结构体类型变量…, 可以给引用的别名引用, 但无实际意义. 3.引用形参: 形参 : 在函数定义中出现的参数可以看做是一个占位符,它没有数据,只能等到函数被调用时接收传递进来的数据...引用形参为什么可以改变实参的内容_关于形参内部表示形式: ?...引用与指针对比: 当引用作为函数参数时, 与指针作为函数参数效果相同, 但引用不会产生指向对象的副本,节省时间和空间 理论来讲: 引用是一个别名,不占用内存(并不确切) 指针一个变量, 一般占用**4...字节(与编译环境也有关)**来存储地址 引用在定义时就被初始化, 引用的对象不能改变, 而指针的指向可以更改, 像const常量指针 引用的变量在定义前必须初始化, 指针不需要, 并且指针还可以指向空地址

1.1K40

【c++】内联-引用-重载

【c++】引用 2.1 引用的概念 引用不是新定义一个变量,而是给已存在变量取了一个别名编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间。...2.6 引用和指针的区别 在语法概念上引用就是一个别名,没有独立空间,和其引用实体共用同一块空间 在底层实现上实际是有空间的,因为引用是按照指针方式来实现的 int main() { int...引用和指针的不同点: 引用概念上定义一个变量的别名指针存储一个变量地址。...引用在定义时必须初始化,指针没有要求 引用在初始化时引用一个实体后,就不能再引用其他实体,而指针可以在任何时候指向任何一个同类型实体 没有NULL引用,但有NULL指针 在sizeof中含义不同:引用结果为引用类型的大小...引用比指针使用起来相对更安全 语法上区别 引用是别名,不开空间;指针是地址,需要开辟空间存地址 引用必须初始化,指针无要求 引用不能改变指向,指针可以 引用相对更安全,没有空引用,但是有空指针;容易出现野指针

6810
您找到你想要的搜索结果了吗?
是的
没有找到

【C++修炼之路】1. 初窥门径

4.3 C++支持函数重载的原理–名字修饰 为什么C++支持函数重载,而C语言不支持函数重载呢? 在C/C++中,一个程序要运行起来,需要经历以下几个阶段:预处理、编译、汇编、链接。...5.7 引用和指针的区别 在语法概念上引用就是一个别名,没有独立空间,和其引用实体共用同一块空间。...引用和指针的不同点: 引用概念上定义一个变量的别名指针存储一个变量地址。...引用在定义时必须初始化,指针没有要求 引用在初始化时引用一个实体后,就不能再引用其他实体,而指针可以在任何时候指向任何一个同类型实体 没有NULL引用,但有NULL指针 在sizeof中含义不同:引用结果为引用类型的大小...不能推导的场景 auto不能作为函数的参数 // 此处代码编译失败,auto不能作为形参类型,因为编译器无法对a的实际类型进行推导 void TestAuto(auto a) {} auto不能直接用来声明数组

99300

【C++】——入门基础知识

引用 6.1 引用概念 引用不是新定义一个变量,而是给已存在变量取了一个别名编译器不会为引用变量开辟内存空 间,它和它引用的变量共用同一块内存空间。...6.6 引用和指针的区别 在语法概念上引用就是一个别名,没有独立空间,和其引用实体共用同一块空间。...引用概念上定义一个变量的别名指针存储一个变量地址。 2. 引用在定义时必须初始化,指针没有要求 3....引用在初始化时引用一个实体后,就不能再引用其他实体,而指针可以在任何时候指向任何一个同类型实体 4. 没有NULL引用,但有NULL指针 5....不能作为函数的参数 // 此处代码编译失败,auto不能作为形参类型,因为编译器无法对a的实际类型进行推导 void TestAuto(auto a) {} 2. auto不能直接用来声明数组 void

9510

C++打怪升级(二)- 引用详解

---- 引用是什么 概念 引用reference是为已经存在的变量取另外一个名字,是该变量的别名。 在C++语法角度:编译器不会为引用变量开辟内存空间,它和所引用的变量共用同一块内存空间。...可以认为是变量n创建了一个匿名临时引用变量,该匿名引用变量是变量n的引用,即n的别名,并作为真正的返回值返回到main函数栈帧里,main函数内部引用遍历ret接受,即ret是匿名临时变量的别名,而匿名临时变量又是变量...引用概念上定义一个变量的别名指针存储一个变量地址; 2. 引用在定义时必须初始化,指针没有要求; 3....引用在初始化时引用一个实体后,就不能再引用其他实体,而指针可以在任何时候指向任何 一个同类型实体; 4. 没有NULL引用,但有NULL指针; 5....引用自加即引用的实体增加1,指针自加即指针向后偏移一个类型的大小; 7. 有多级指针,但是没有多级引用; 8. 访问实体方式不同,指针需要显式解引用,引用编译器自己处理; 9.

33320

从基础入门到学穿C++(C++语法基础篇)【超详细】【一站式速通】

总结:引用取别名时,变量取别名时,变量访问的权限可以缩小,不能放大。需要注意的是,变量之间赋值没有权限缩小和放大的关系。因为赋值的双方是两块独立的空间,一个的改变不会影响另外一个。...但其实在底层实现上实际是有空间的,因为引用是按照指针方式来实现的。 引用概念上定义一个变量的别名指针存储一个变量地址。...引用在定义时必须初始化,指针没有要求 引用在初始化时引用一个实体后,就不能再引用其他实体,而指针可以在任何时候指向任何一个同类型实体 在sizeof中含义不同**:引用结果为引用类型的大小**,但指针始终是地址空间...,所占字节个数为32/64个字节 引用自加即引用的实体增加1,指针自加即指针向后偏移一个类型的大小 有多级指针,但是没有多级引用 访问实体方式不同,指针需要显式解引用,引用编译器自己处理 内联函数 以inline...而在g++环境中编译时,添加了函数名修饰的功能,比如说一个函数void Test(int a , double x),其函数名在调用时,被修饰成了,由此我们可以理解,为什么C++的语法支持函数重载

33310

【C++修行之道】引用、内联函数、auto关键字、for循环(C++)、nullptr(C++11)

: 引用和指针的不同点: 引用概念上定义一个变量的别名指针存储一个变量地址。...引用比指针使用起来相对更安全 (注:Java只有引用,存储的是下一个节点的别名,Java的引用可以改变指向) 二、内联函数 2.1 概念 以inline修饰的函数叫做内联函数编译时C++编译器会在调用内联函数的地方展开...vs2013的设置方式) 2.2 特性 inline是一种以空间换时间的做法,如果编译器将函数当成内联函数处理,在编译阶段,会用函数体替换函数调用,缺陷:可能会使目标文件变大,优势:少了调用开销,提高程序运行效率...还有一个解决方法:可以通过typedef给类型取别名,比如: #include #include typedef std::map<std::string, std::string...} 3.4 auto不能推导的场景 1. auto不能作为函数的参数 // 此处代码编译失败,auto不能作为形参类型,因为编译器无法对a的实际类型进行推导 void TestAuto(auto a

2800

【C++】引用与内联

引用 2.1 引用概念 引用不是新定义一个变量,而是给已存在变量取了一个别名编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间。...销毁栈帧,vs不清理空间,会给一个临时变量,如果临时变量比较小,通常使用寄存器充当。...,但是不能完全替代指针 引用不能完全替代指针原因:引用定义后,不能改变指向 就像在链表中删除一个节点 在语法概念上引用就是一个别名,没有独立空间,和其引用实体共用同一块空间。...引用概念上定义一个变量的别名指针存储一个变量地址。...vs2022的设置方式) 3.2 特性 inline是一种以空间换时间的做法,如果编译器将函数当成内联函数处理,在编译阶段,会用函数体替换函数调用,缺陷:可能会使目标文件变大,优势:少了调用开销,提高程序运行效率

9110

【C++】——入门基础知识超详解

一个工程中允许存在多个相同名称的命名空间,编译器最后会合成同一个命名空间中。...; // 调用 Print(const std::string&) return 0; } 5.2 C++支持函数重载的原理 -- 名字修饰 (Name Mangling) 为什么C+...引用 6.1 引用概念 引用是C++中一个重要的概念,它并不是定义一个新变量,而是给已经存在的变量取了一个别名。引用和被引用的变量共享同一块内存空间,因此引用不会占用额外的内存空间。...引用是变量的别名指针存储变量的地址 int a = 10; int& ref = a; // 引用 int* ptr = &a; // 指针 引用在定义时必须初始化,指针可以不初始化 int a...< sizeof(ptr) << std::endl; // 输出指针类型的大小(4或8字节) 引用自加即引用的实体增加1,指针自加即指针向后偏移一个类型的大小 int a = 10; int& ref

7410

C++进阶之路:何为引用、内联函数、auto与指针空值nullptr关键字

C++中的引用 引用概念 引用不是新定义一个变量,而是给已存在变量取了一个别名编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间。...引用和指针的区别 在语法概念上 引用就是一个别名,没有独立空间,和其引用实体共用同一块空间。...底层汇编语言里 引用与指针是一样的 都是指针 引用与指针的不同点 引用概念上定义一个变量的别名指针存储一个变量地址。...引用在定义时必须初始化,指针没有要求 引用在初始化时引用一个实体后,就不能再引用其他实体,而指针可以在任何时候指向任何一个同类型实体 没有NULL引用,但有NULL指针 在sizeof中含义不同:...,以下给出vs2013的设置方式) 调完设置后: 内联函数的特性 1.inline是一种以空间换时间的做法,如果编译器将函数当成内联函数处理,在编译阶段,会用函数体替换函数调用 缺陷:可能会使目标文件变大

13010

C++11新特性学习笔记

使用constexpr,你可以创建一个编译时的函数: constexpr函数的限制: 函数中只能有一个return语句(有极少特例) 函数必须返回值(不能是void函数) 在使用前必须已有定义 return...返回语句表达式中不能使用非常量表达式的函数、全局数据,且必须是一个常量表达式 常量表达式的构造函数有以下限制: 函数体必须为空 初始化列表只能由常量表达式来赋值 3.7 用户定义字面量(vs2013...std::function 在C++中,可调用实体主要包括:函数函数指针函数引用、可以隐式转换为函数指定的对象,或者实现了opetator()的对象。...C++11中,新增加了一个std::function类模板,它是对C++中现有的可调用实体的一种类型安全的包裹。...(111) ->: 111 ​ operator()(222) ->: 222 */ return 0; } std::function对象最大的用处就是在实现函数回调,使用者需要注意,它不能被用来检查相等或者不相等

2.2K20

C++11新特性学习笔记

使用constexpr,你可以创建一个编译时的函数: constexpr函数的限制: 函数中只能有一个return语句(有极少特例) 函数必须返回值(不能是void函数) 在使用前必须已有定义 return...返回语句表达式中不能使用非常量表达式的函数、全局数据,且必须是一个常量表达式 常量表达式的构造函数有以下限制: 函数体必须为空 初始化列表只能由常量表达式来赋值 3.7 用户定义字面量(vs2013...std::function 在C++中,可调用实体主要包括:函数函数指针函数引用、可以隐式转换为函数指定的对象,或者实现了opetator()的对象。...C++11中,新增加了一个std::function类模板,它是对C++中现有的可调用实体的一种类型安全的包裹。...(111) ->: 111 ​ operator()(222) ->: 222 */ return 0; } std::function对象最大的用处就是在实现函数回调,使用者需要注意,它不能被用来检查相等或者不相等

2K20

UNIX(多线程):14---理解线程构造函数

第一参数的类型并不是c语言中的函数指针(c语言传递函数都是使用函数指针),在c++11中,增加了可调用对象(Callable Objects)的概念,总的来说,可调用对象可以是以下几种情况: 函数指针...重载了operator()运算符的类对象,即仿函数 lambda表达式(匿名函数std::function 函数指针示例 // 普通函数 无参 void function_1() { } //...而t2之所以编译错误,是因为编译器并没有将Fctor()解释为一个临时对象,而是将其解释为一个函数声明,编译器认为你声明了一个函数,这个函数不接受参数,同时返回一个Factor对象。...:endl; return 0; } // vs下:最终是:"hello" // g++编译器:编译报错 事实上,该代码使用g++编译会报错,而使用vs2015并不会报错,但是子线程并没有成功改变外面的变量...如下面修改后的代码: std::thread t1(f, std::ref(m)); 然后vs和g++都可以成功编译,而且子线程可以修改外部变量的值。

59220

你该知道的C++四种显式类型转换

,也与编译器的属性设置有关.所以不能完全使用C语言的强制转换替代,它也是最常有用的,最不可缺少的一种强制转换....这个检查主要来自虚函数(virtual function) 在C++的面对对象思想中,虚函数起到了很关键的作用,当一个类中拥有至少一个函数,那么编译器就会构建出一个函数表(virtual method...table)来指示这些函数的地址,假如继承该类的子类定义并实现了一个同名并具有同样函数签名(function siguature)的方法重写了基类中的方法,那么虚函数表会将该函数指向新的地址。...a pointer to a function of a different type (从指向函数指针转向另一个不同类型的指向函数指针) A pointer to an object to a...types (从一个指向成员的指针转向另一个指向类成员的指针

1.8K20

C++:33---类成员指针

如果没有这对括号,编译器将认为该声明是一个(无效的)函数声明: 错误的原因:编译器会认为p是一个普通函数,并且返回Screen类的一个char成员。...因为成员指针不是可调用对象,所以我们不能直接将一个指向成员函数指针传递给算法 例如,下面在一个vector中寻找第一个空的string: std::vector svec;auto...,而非函数 ①使用function生成一个可调用对象 function模板: 从指向成员函数指针获取可调用对象的一种方法是使用function模板。...我们也可以采取另一种方法,就是使用标准库功能mem_fn来让编译器负责推断成员的类型 mem_fn也定义在functional头文件中,并且可以从成员指针生成一个可调用对象 和function不同的是:...mem_fn可以根据成员指针的类型推断可调用对象的类型,而无须用户显式地指定 例如:我们使用mem_fn生成一个可调用对象,该对象接受一个string实参,返回一个bool值(编译器自动推断的) std

83530

C++:C++入门基础

windows下vs编译器对函数名字修饰规则相对复杂难懂 C/C++ 函数调用约定___declspec(dllexport) void test2();-CSDN博客 思考:如果两个函数函数名和参数是一样的...引用一旦引用一个实体,再不能引用其他实体 就是只能给一个变量当别名不能给多个变量当别名 9.3 常引用 指针和引用,赋值/初始化权限可以缩小或者平移,但是不能放大 9.4 使用场景 1....9.6 引用和指针的区别 在语法概念上引用就是一个别名,没有独立空间,和其引用实体共用同一块空间。...引用概念上定义一个变量的别名指针存储一个变量地址。 2. 引用在定义时必须初始化,指针没有要求 3....引用比指针使用起来相对更安全(因为引用必须初始化,而指针不用,没有空引用,但是有空指针) 10.在有些需要用二级指针的场景,较难理解,用引用就可以简化一点 十、内联函数 为什么要有内联函数呢??

16310

C++从入门到精通——auto的使用

聪明的同学可能已经想到:可以通过typedef给类型取别名,比如: #include #include typedef std::map<std::string, std:...const pstring* p2;表示p2是一个指向pstring类型的常量指针。即,p2是一个指针变量,它指向的是pstring类型的常量。...由于pstring是char*的别名,因此这里p2是一个指向char*类型的常量指针。 现在来看char const *p1,这是C++中另一种定义常量指针的方式。...C++11中,标准委员会赋予了auto全新的含义即:auto不再是一个存储类型指示符,而是作为一个新的类型指示符来指示编译器,auto声明的变量必须由编译器在编译时期推导而得。...不能推导的场景 auto不能作为函数的参数 // 此处代码编译失败,auto不能作为形参类型,因为编译器无法对a的实际类型进行推导 void TestAuto(auto a) {} auto不能直接用来声明数组

22610
领券