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)
左值:既能出现在赋值语句的左边,又能出现在赋值语句的右边的表达式;
右值:只能出现在赋值语句的右边而不能出现在赋值语句的左边的表达式。
变量是左值,数字字面值、数字表达式是右值。
通常左值比右值适用范围更广,但是有一个例外: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)
相关文章推荐
- c语言中static作用的简单概述
- C++中变量存储类型
- C++学习笔记2——浮点型与字面值
- C++学习笔记1——iostream与整型
- C语言入门之输入输出
- c++封装socket
- c++ && Java
- C++文件流public function—eof()
- C语言:编写一个程序,它从标准输入(终端)读取C源代码,并验证所有的花括号都正确的成对出现
- C语言:求Sn=a+aa+aaa+aaaa+aaaaa的前5项之和,其中a是一个数字,例如:2+22+222+2222+22222
- C语言:模拟输入密码系统,三次以内正常通过,三次退出程序
- C语言:每隔一秒,动态首尾依次输出一个字符,直到全部输出
- c/c++处理参数
- Emacs 24.4 配置C++智能提示
- C语言:typedef struct与指针
- 求Sn=a+aa+aaa+aaaa+aaaaa的前5项之和,其中a是一个数字,
- 模拟银行用户三次密码输入
- c++的this指针与空指针类成员函数访问
- c++ virtual关键字详解
- 首尾动态输出一个字符,最后将所有一串整的字符输出