变量,提供了程序可以操作的有名字的存储区。
左值(lvalue):变量的地址,或者是一个表示“对象在内存中的位置”的表达式。
右值(rvalue):变量的值。
//val1为左值,而val2和8为右值int val1 = val2 + 8;变量名,即变量的标识符(identifier)
由字母、数字和下划线组成不能以数字开头在定义变量时,C++
有两种初始化方式:赋值初始化和直接初始化
初始化是在指在创建变量的时候给它赋初始值;而赋值是指擦除对象的随机值后再赋新值。两者之间的关系在后续学习中了解,现在我们需要知道的是:直接初始化更灵活且效率更高!
定义如何进行初始化的成员函数称为构造函数(constructor),通过构造函数实现不同的初始化方式。
#include <string>std::string titleA = "C++ PRimer, 4th Ed.";std::string titleB("C++ Primer, 4th Ed.");std::string all_nines(10,'9'); //all_nines = "9999999999"可以用同一个定义中前面定义的变量来初始化后面的变量
double salary = 9999.99, wage (salary + 0.01);一个定义中,可以同时存在初始化和非初始化的变量
int interval, month = 8; day = 7; year(1955);当我们没有初始化变量时,系统有时会为我们初始化变量。
是否自动初始化取决于该变量的位置
在函数体外,则都初始化为0
在函数体内,则不进行初始化Tips:
建议每个内置类型的对象都要初始化!
初始化取决于自身定义的构造函数或者在未定义构造函数情况下的默认构造函数(default constructor)
有一个问题不知各位想过没有:如果我在一个.cpp
文件中定义了一个变量,然而,我想在另一个.cpp
文件中也是用这个变量,该怎么实现呢?C++
为我们设计好了解决方法:声明和定义
定义(definition):用于为变量分配存储空间,还可以为变量指定初始值。一个程序中,变量有且仅有一次定义。
声明(declaration):用于向程序表明变量的类型和名字。使用关键字extern
声明变量名而不定义它,只是说明变量定义在程序的其他地方,因此声明并不会为变量分配存储空间。
Tips:
当extern
声明位于函数外部时,其可以含有初始化式从而可以视为定义。
任何在多个文件中使用的变量(如extern double pi = 3.1416;
),都需要有与定义分离的声明!在这种情况下,一个文件含有变量的定义,在其他使用到该变量的文件中则应包含该变量的声明。
不用多说,看程序即可:
#include <iostream>#include <string>std::string s1 = "hello"; //s1 has global scope(全局作用域)int main() //main has global scope{ std::string s2 = "world"; //s2 has local scope(局部作用域) //use global s1; print "hello world" std::cout << s1 << " " << s2 << std::endl; int s1 = 42; //s1 is local and hides(屏蔽) global s1 for(int val = 1; val <= 10; ++val) //val is statement scope(语句作用域) std::cout << s1 << " " << s2 << std::endl; //print "42 world" 10 times return 0;}Tips:
通常把一个对象定义在它首次使用的地方是一个很好的方法!
新闻热点
疑难解答