//引用做左值
#include<iostream> using namespace std; int SetA(int *p){
*p = ;
return *p;
} int& SetB(int *p){
*p = ;
return *p;
} void main(){
int a1 = ;
//SetA(&a1) = 100;
//报错 error C2106: “=”: 左操作数必须为左值
//SetA(&a1)的运算结果是一个数值 没有内存地址 不能当左值
//30=100;是错误的 SetB(&a1) = ;
printf("a1=%d\n",a1);//打印 a1=100;
//详解 由上一篇 引用的本质 可知SetB(&a1) 返回的是一个 引用指针
//强调:在函数SetB()中,*p这个语句的返回值是变量a1,不是数值20;反证一下,假设*p返回的是数值20,那么*p=100;还能成立吗?
//20是字面量没有内存地址,不可以做左值
//所以*p返回的一定是一段内存空间,因此int & temp=一段内存空间;这是合理的。
//当引用做左值时,c++编译器会默认执行 提领 * 操作
//即*p=100; 这是符合语法规范的
system("pause");
}

C++ 引用做左值的更多相关文章

  1. 常量函数、常量引用参数、常量引用返回值[C++]

    1. 关于常量引用正像在C语言中使用指针一样,C++中通常使用引用 有一个函数... foo()并且这个函数返回一个引用...... & foo()...., 一个指向位图(Bitmap)的引 ...

  2. const引用返回值

    一.引用 引用是别名 必须在定义引用时进行初始化.初始化是指明引用指向哪个对象的唯一方法. const 引用是指向 const 对象的引用: ; const int &refVal = iva ...

  3. 【温故知新C/C++/opencv】取址符&||cv::groupRectangles||引用与值传递

    cv::groupRectangles void groupRectangles(vector<Rect>& rectList, int groupThreshold, doubl ...

  4. js 参数的 引用与值传递

    js中arr的赋值不影响原数组,赋值和引用的区别 1.赋值 var a = 1; var b = a;   //赋的是a的复制值 b ++; alert(a);   //"1"   ...

  5. 引用传递&值传递

    下面的程序阐述了值传递与应用传递的区别. package com.liaojianya.chapter1; /** * This program demonstrates the use of arr ...

  6. 关于C#编程中引用与值类型赋值的一些容易犯错的地方

    值类型与引用类型的区别在于:值类型在赋值的时候是拷贝值,引用类型在赋值的时候的拷贝引用.记住这一个原则,我们再来分析一些具体情况: PointStruct pt1 = ,); PointStruct ...

  7. c++引用(修改引用的值)

    当我们希望修改某个函数的返回值时,通常我们会返回这个值的引用(因为函数返回值其实是返回那个值得一份拷贝而已,所以想要修改必须使用引用): .h文件 #pragma once #include < ...

  8. c++引用返回值

    引用作为函数的返回值时,函数的返回值能够理解为函数返回了一个变量(事实上,函数返回引用时,它返回的是一个指向返回值的隐式指针),因此,值为引用的函数能够用作赋值运算符的左操作数.另外,用引用返回一个函 ...

  9. 左值引用&右值引用实践【TODO】

    这篇文章写的很好,下半部分还未完全理解,后续还需要回头来看看20190706(): https://www.cnblogs.com/likaiming/p/9045642.html 简单实践如下: # ...

随机推荐

  1. T-SQL 之 存储过程

    当存储过程执行一次后,可以将语句缓存中,这样下次执行的时候直接使用缓存中的语句.这样就可以提高存储过程的性能. 一.存储过程的概念 存储过程Procedure是一组为了完成特定功能的SQL语句集合,经 ...

  2. SQL语法 之 基本查询

    一.语法结构 SELECT select_list [ INTO new_table ] FROM table_source [ WHERE search_condition ] [ GROUP BY ...

  3. com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "ExceptionId"

    com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "Exception ...

  4. linux命令:tail 命令

    tail 命令从指定点开始将文件写到标准输出.使用tail命令的-f选项可以方便的查阅正在改变的日志文件,tail -f filename会把filename里最尾部的内容显示在屏幕上,并且不但刷新, ...

  5. OFBiz:解析doRequest()

    这里的doRequest()是指RequestHandler中的同名函数: public void doRequest(HttpServletRequest request, HttpServletR ...

  6. mysql数据库创建删除带横杠的数据库名

    mysql> create database d-d; ERROR 1064 (42000): You have an error in your SQL syntax; check the m ...

  7. 教你在Ubuntu系统下保存屏幕亮度设置

     本文保留屏幕亮度方法适合使用笔记本的朋友,大家都知道,过亮的屏幕不但刺眼而且缩短LCD屏幕寿命,不幸的是,Ubuntu默认关机后并不保存当前屏幕亮度配置数据,每次开机都要重新设置亮度,很不方便.本文 ...

  8. Python线程指南(转)

    1. 线程基础 1.1. 线程状态 线程有5种状态,状态转换的过程如下图所示: 1.2. 线程同步(锁) 多线程的优势在于可以同时运行多个任务(至少感觉起来是这样).但是当线程需要共享数据时,可能存在 ...

  9. mosquitto 启动命令

    启动命令 mosquitto [-c config file] [ -d | --daemon ] [-p port number] [-v] -c 后面跟的是启动mosquitto可以调整的参数,比 ...

  10. Java面试题无答案

    写在前面:这篇文章里面总结了很多Java相关的知识,基本上应该算是每个Java程序员必须会的一些知识,所以,也就是很多面试官喜欢拿来考的一些东西.总结他们第一个目的是自己能够经常拿出来看一看,第二个也 ...