C++11学习笔记(2)

变量和基本类型1

  • C++算数类型
类型含义最小尺寸
bool布尔类型未定义
char字符8位
wchar_t宽字符16位
char16_tUnicode字符16位
char32_tUnicode字符32位
short短整型16位
int整型16位
long长整型32位
long long长整型64位
float单精度浮点6位有效数字
double双精度浮点10位有效数字
long double扩展精度浮点数10位有效数字

类型转换区分:
1、把非bool型赋给bool型,初始值为0结果为false,否则结果为true。
2、把bool赋给非bool型,初始值false结果为0,为true结果为1。
3、赋给无符号类型一个超出其表示范围值时,结果是初始值对无符号类型数值总数(表示范围内数的个数)取模后的余数。如8比特的无符号可表示0~255区间内的值,如果赋予了区间外值,实际结果应该是该值对256取模后的余数。例如把-1赋给8比特的无符号类型所得结果是255。

  • 对于使用if语句应注意地方
int i = 42;
if(i)   //if条件的值将为true
    i = 0;

if( i == 0)     //if条件为false
    i = 1;

if( i = 1)      //if条件恒为true,此处为赋值语句,不管怎样,不会出现任何警告或错误
    i = 2;
//为防止出现如上错误,一般将定值写前面
if( 1 == i)     // 如果忘写一个“=”会报错
  • 赋值初始化辨析:
    初始化不是赋值,初始化含义是创建变量时赋予其一个初始值,而赋值的含义是把对象的当前值擦出,而以一个新值来代替。

    c++初始化形式:

int i = 0;
int i = {0};
int i(0);
int i{0};

作为c++11标准的一部分,用花括号初始化形式称为列表初始化。当用于内置类型的变量时,这种初始化有一个重要特点:如果我们使用列表初始化且初始值存在丢失信息风险,编译器将报错:

long double ld = 3.141592654;
int a{ld}, b = {ld};    //错误,转换未执行,因为存在丢失信息风险
int c{ld}, b = ld;      //正确,转换执行,且确实丢失了部分值
  • 变量声明和定义
    声明使得名字为程序所知,而定义负责创建与名字关联的实体。也即定义申请了存储空间,也有可能为变量赋初始值。
    如果想声明一个变量而非定义它,就在变量名前添加关键字extern,而且不要显示地初始化变量:
extern int i;       //声明i而非定义
int j;      //声明并定义j
//定义pi,任何包含了显示初始化的声明都成了定义,这样抵消了extern作用
extern double pi = 3.1416;      

在函数体内部,如果试图初始化一个由extern关键字标记的变量,将引发错误。
变量只能被定义一次,但是可以被多次声明。
声明和定义区别看起来也许微不足道,但实际非常重要,如果需要在多个文件中使用同一个变量,就必须将声明和定义分离。此时,变量的定义必须出现在且只能出现在一个文件中,而其他使用该变量的文件中必须对其进行声明,却不能重复定义

- 嵌套的作用域
因为有内层作用域和外层作用域之分,但当在内部想使用外部作用域的同名变量时,该怎样用?以下用一个小程序解释区分:

#include <iostream>
using namespace std;
//该程序仅用于说明:函数内部不宜定义与全局变量同名的新变量
int reused = 42;    //reused拥有全局作用域
int main()
{
    int unique = 0;    //块作用域
    //输出: 42  0
    cout<<reused<<" "<<unique<<endl;
    int reused = 0;    //新建局部变量,覆盖同名全局变量
    //输出: 0 0
    cout<<reused<<" "<<unique<<endl;
    //使用作用域操作符显示访问全局变量,输出: 42 0
    cout<<::reused<<" "<<unique<<endl;

    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

幻欢子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值