您的位置:首页 > 编程语言 > C语言/C++

C++学习笔记3——变量

2015-10-10 19:49 309 查看
1,左值与右值

左值:既能出现在赋值语句的左边,又能出现在赋值语句的右边的表达式;

右值:只能出现在赋值语句的右边而不能出现在赋值语句的左边的表达式。

变量是左值,数字字面值、数字表达式是右值。

通常左值比右值适用范围更广,但是有一个例外:const 引用可以指向右值,但不能指向左值。

2,标识符(变量名即变量的标识符,函数名是函数的标识符)

(1)必须以字母或下划线开头,区分大小写;

(2)不得占用C++的63个关键字和11个操作符替代名;

(3)C++03和C++11的标准都规定,标识符不能包含两个连续的下划线,也不能以一个下划线和一个大写字母开头。定义在函数外的标识符(如全局变量)不能以下划线开头。标准原文如下:

— Each name that contains a double underscore (_ _) or begins with an underscore followed by an uppercase letter (2.11) is reserved to the implementation for any use.
— Each name that begins with an underscore is reserved to the implementation for use as a name in the global namespace.Such names are also reserved in namespace ::std.

但是,在实际应用中编译器,不管是g++还是visual studio并不一定会为此报错。

个人理解:这样的标识符是“ is reserved to”(保留给)编译器用的,但可能编译器不会去检查标识符是否违反了这条规则。如果编译器刚好没用这个标识符,那么就不会因有冲突而报错。

3,自动初始化

(1)内置类型:

a,定义在函数体外,全部初始化为0;

b,定义在函数体内,

(i)自动变量,不自动初始化,值未知;

(ii)static变量,第一次调用时初始化为0,以后不初始化;

(2)类类型

使用默认构造函数

4,初始化的两种方式

(1) =,被称为复制初始化;

(2) (),被称为直接初始化

5,声明与定义

(1)有初始化式的必定是定义,不管有没有使用extern;

(2)如果有初始化式,又使用了extern,则该定义只能位于函数外部;

(3)不包含初始化式,且含有extern,则为声明,不是定义;

(4)如果不包含extern,不管有没有初始化式,都是定义;

(5)同一个变量,只能定义一次,但可以声明多次;

if(有初始化式) || (没有extern)

{

表达式为定义;

if(有初始化式) && (有extern)

{

该定义只能位于函数外部;

}

}

else

{

表达式为声明;

}

6,作用域

全局作用域(global scope)

局部作用域(local scope)

语句作用域(statement scope)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: