本章主要内容:

  • 1)bool类型
  • 2)三目运算符
  • 3)引用

1.布尔型bool

在C++中,bool类型只有true(非0)和flase(0)两个值,且bool类型只占用了一个字节.

例如:

#include <stdio.h>

int main()
{
bool b=false;
printf("b=%d\n",b); b=-; //由于-5是个非0值,所以b=1
int a=b;
printf("a=%d,b=%d\n",a,b);
}

输出结果:

b=
a=,b=

2.C++三目运算符

C++对三目运算符进行了升级,升级后的三目运算符可以放在左值使用,例如:

int a=,b=;

(a>b?a:b)=;     //由于a不大于b,所以返回值为b变量,即等价于: b=100

printf("a=%d,b=%d\n",a,b );

输出结果:

a=,b=

注意: 放在左值使用时,三目运算符可能返回的值都必须是变量,若有常量,则编译会报错.

3.C++的&引用

3.1 引用在定义时,必须初始化,且类型必须一致,初始化的值必须是变量,而非常量

只用const引用才允许初始化的值是常量(在3.3小节会讲解),例如:

int a=;

int &b=a;        //引用b是a的别名,也就是a和b都是同一个变量,操作b就等于操作a

//int &b=1;      //出错,因为只有const引用才允许初始化的值是常量 

3.2 &引用的本质

引用的本质就是一个指针常量(从反汇编看出),因此引用所占用的空间大小与指针相同,比如:

int & a;    <---等价于-->  int *const a;

引用比指针更适合做为函数的参数,具有更好的可读性,例如:

#include <stdio.h>

/*交换a和b的值*/
void swap(int& a,int& b)
{
int tmp; tmp=a;
a=b;
b=tmp;
} int main()
{
int a=,b=; swap(a,b);
printf("a=%d b=%d\n",a,b);
return ;
}

输出结果:

a=  b=

3.3 const &引用

const &修饰为只读变量

  • 使用常量对const引用初始化时,编译器会自动分配一段空间,
  • 使用变量对const引用初始化时,编译器不会分配空间,而是将const引用和变量捆绑在一起。

例如:

#include <stdio.h>
int main()
{
int c=; const int& a = ; //定义const引用a,指定a的初始化是个常量1
const int& b = c; //定义const引用b,指定b的初始化是个变量c int *p =(int *)&a; //b=2; //错误,不能直接修改const引用的内容,因为b是个只读变量 *p=; //改变const引用a的内容
printf("a=%d,b=%d,c=%d\n",a,b,c); p= (int *)&b;
*p=; //改变const引用b的内容
printf("a=%d,b=%d,c=%d\n",a,b,c);
return ;
}

输出结果:

a=,b=,c=
a=,b=,c=

从结果可以看出:

  • const引用a初始化的是一个常量1,但却能被修改成功,说明a有自己的一段存储空间
  • 而const引用b被指针修改后,变量c也跟着改变,说明const引用b和变量c的存储空间是一起的
  • 所以,在C++中,const修饰的是常量,而const & 修饰的是只读变量(可以通过指针修改值)

注意:在初始化时,比如变量c和const引用b定义的类型不同,则将会生成一个新的存储空间给b,并赋值.

例如:

   char c= 'c';  

   const int &b = c;

   c='b';      //修改c的值,对b没有任何影响

   printf("b='%c'  c='%c'\n",b,c);

输出结果:

b='c'   c='b'

3.4 引用数组

C++不支持引用数组,因为在C中,数组存放的是连续相邻的一串数据,所以C++也要兼容该特性。

而引用恰好破坏了该特性.

以一个错误为例:

#include <stdio.h>

int a = ; //全局变量

int main()
{
int b = ; //局部变量
int* pc = new int(); //栈地址处的变量 int& array[] = {a, b, *pc}; //编译出错 delete pc;
return ;
}

从上面可以看到a, b, *pc这3个变量的定义位置都不同,分配的存储空间地址也是不连续的,然后又使:

  • array[0]的地址=a地址
  • array[1]的地址=b地址
  • array[2]的地址=pc地址

所以导致数组存放的数据不是连续相邻的,编译出错

下章接着来学习: 3.C++内联函数,默认参数,占位参数

2.C++中的bool类型,三目运算符,引用的更多相关文章

  1. object-c中的BOOL类型

    object-c中的布尔类型比C语言中的bool类型早了10年,它具有YES和NO两种值.在object-c中的布尔类型BOOL实际上是一种带符号的字符类型(signed char),它使用的空间是1 ...

  2. c语言中自定义bool类型模板

    首先,c语言中没有bool类型,只有c++中有,所以需要自定义,即c中表示bool类型的方法: 1.模板1 typedef int bool; #define false 0 #define true ...

  3. C++中的布尔类型和引用

    1,C++ 中的布尔类型: 1,C++ 在 C 语言的基础类型系统之上增加了 bool: 1,C 语言中,没有 bool 类型存在,往往都是用整型代替 bool 类型,常用 0 表示假,用 1 表示真 ...

  4. C++中的bool类型

    1.C++中的布尔类型 (1)C++在C语言的基础类型系统之上增加了bool: 1)C语言中,没有bool类型存在,往往都是用整型代替bool类型,常用0表示假,1表示真: 2)bool本来就有这样的 ...

  5. Python中的bool类型

    Python 布尔类型 bool python 中布尔值使用常量True 和 False来表示:注意大小写 比较运算符< > == 等返回的类型就是bool类型:布尔类型通常在 if 和 ...

  6. C#中判断bool 类型 代码的最短写法

    看到一个关于写最短代码的,  是一个bool类型判断的:    public bool IsNull(object val) { if (val == null) { return true; } e ...

  7. JavaScript中关于bool类型判断的一些总结。

    我从书上看到了一些关于   int类型 0 转换成boolean值得时候会把0转换成 false ,string 类型 的  "" 也会装换成false; 所以我就想,我能不能用一 ...

  8. Objective-C 中的 BOOL

    之前开发了一个针对单个数据模型,自动建表.增删改查等操作的 ORM 库,后边在 iPhone 5c 上使用时,出现了 crash 的情况. 该项目在 Github 开源,项目地址为SXJDatabas ...

  9. bool和BOOL类型知识集合

    知识点一.C语言中有bool类型吗? 转自http://blog.csdn.net/liuqiqi677/article/details/6703615 之前一直都没有注意到,最近在用C语言写DSP算 ...

随机推荐

  1. Ubuntu Apache 不同端口监听不同站点

    在/etc/apache2/apache2.conf 中,把项目根目录设置成默认的/var/www 不要设置在某个站点的路径下(我就是配置第一个站点时改了这里才会配置第二个站点时好久弄不出来) 在 / ...

  2. Spring配置Bean,为属性赋值

    SayHello的实体类: package com.langchao; /** * @ClassName: SayHello * @description: * @author: ZhangYawei ...

  3. MD5盐值加密

    加密思路 思路解析:(数据解析过程基于16进制来处理的,加密后为16进制字符串) 加密阶段: 对一个字符串进行MD5加密,我们需要使用到MessageDigest(消息摘要对象),需要一个盐值(sal ...

  4. Python自动化开发 - Python操作Memcached、Redis、RabbitMQ

    Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载. 它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速 ...

  5. day_1 Python介绍及计算机组成和系统

    python学习路线 基础语法 - 文件操作 - 函数 - 模块 - 面向对象(类) - 网络编程 - 数据库 - 前段 - 项目 学习方法 wwwh: what-why-where-how #wha ...

  6. 微信公众号UX分析—— 学生作业小结

    1. 不足: 1. 权威性:个人帐号,显得不够正式. 2. 排版问题: + 没有必要的外接端口,界面设计极度缺少排版.哪怕是个人公众号都不至于如此,更何况这是一个学校的教务平台. 3. 反应不及时或无 ...

  7. HTTPS抓包之Charles

    这里对HTTP请求的抓包操作不做讲解了,只讲解HTTPS的抓包要进行的操作. [说明]:下面以MAC电脑示例,Windows版本可参考:http://weibo.com/ttarticle/p/sho ...

  8. 4.json解析

    格式 {"name":"zhangsan", "age":18, "books":[{"name": ...

  9. bootstrap教程,SQL

    版权声明:未经博主允许不得转载 SQL DDL数据定义语言 TPL事务处理语言 DCL数据控制语言 DML数据操作语言 DML SELECT INSERT UPDATE DELETE Join从句 J ...

  10. 从零搭建java后台管理系统(二)mysql和redis安装

    接上篇开始安装mysql和redis 注意了,如果用阿里云服务器,外网访问的端口必须在安全组开启,否则外网访问不通 三.服务器安装redis和mysql 本次环境搭建将所有第三方服务会安装在阿里云服务 ...