C++变量

变量

变量其实只不过是程序可操作的存储区的名称。 C++ 中每个变量都有指定的类型,类型决定了变量存储的大小和布局,该范围内的值都可以存储在内存中,运算符可应用于变量上。

C++ 中的变量声明

变量声明向编译器保证变量以给定的类型和名称存在,这样编译器在不需要知道变量完整细节的情况下也能继续进一步的编译。变量声明只在编译时有它的意义,在程序连接时编译器需要实际的变量声明。

int    i, j, k;
char   c, ch;
float  f, salary;
double d;
extern int d = 3, f = 5;    // d 和 f 的声明 
int d = 3, f = 5;           // 定义并初始化 d 和 f
byte z = 22;                // 定义并初始化 z
char x = 'x';               // 变量 x 的值为 'x'

不带初始化的定义:带有静态存储持续时间的变量会被隐式初始化为 NULL(所有字节的值都是 0),其他所有变量的初始值是未定义的。

C++ 中的左值(Lvalues)和右值(Rvalues)

C++ 中有两种类型的表达式:

  • 左值(lvalue):指向内存位置的表达式被称为左值(lvalue)表达式。左值可以出现在赋值号的左边或右边。
  • 右值(rvalue):术语右值(rvalue)指的是存储在内存中某些地址的数值。右值是不能对其进行赋值的表达式,也就是说,右值可以出现在赋值号的右边,但不能出现在赋值号的左边。

变量是左值,因此可以出现在赋值号的左边。数值型的字面值是右值,因此不能被赋值,不能出现在赋值号的左边。下面是一个有效的语句:

int g = 20;

但是下面这个就不是一个有效的语句,会生成编译时错误:

10 = 20;

C++ 变量作用域 variable scope

作用域是程序的一个区域,一般来说有三个地方可以定义变量:

  • 在函数或一个代码块内部声明的变量,称为局部变量(local variable)
  • 在函数参数的定义中声明的变量,称为形式参数(parameter)
  • 在所有函数外部声明的变量,称为全局变量(global variable)

变量的初始化

// initialization of variables

#include <iostream>
using namespace std;

int main ()
{
  int a=5;               // initial value: 5   C风格初始化
  int b(3);              // initial value: 3   ()初始化
  int c{2};              // initial value: 2   {}初始化
  
  int result;            // initial value undetermined

  a = a + b;
  result = a - c;
  cout << result;

  return 0;
}

以上,初始化变量的所有三种方式在C++中都是有效且等效的。

类型扣除:auto和decltype

初始化新变量时,编译器可以通过初始化程序自动确定变量的类型。为此,只需使用auto变量的类型说明符:

int foo = 0;
auto bar = foo;  // the same as: int bar = foo; 

这里,bar声明有一个auto类型; 因此,type bar是用于初始化它的值的类型:在这种情况下,它使用的类型fooint

未初始化的变量也可以使用带有说明decltype符的类型推导:

int foo = 0;
decltype(foo) bar;  // the same as: int bar; 

这里,bar被声明为具有相同的类型foo

auto并且decltype是最近添加到该语言的强大功能。但是,它们引入的类型推导功能意味着在通过其他方式无法获得类型或使用它时提高代码可读性时使用。上面的两个例子可能都不是这些用例。事实上,它们可能降低了可读性,因为在阅读代码时,必须搜索foo实际知道类型的类型bar

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 话说N年前,有人把“五讲四美三热爱”翻译成英文,想到国际上去推广。那英文翻译为:“five talks,four ...
    张责乘阅读 7,835评论 0 0
  • 西陵雪莉的出现让整个院子都静了下来。 “这就是将军府嫡出大小姐吧。” “长得倒真当俊俏,和她站在一起雨凝媚这个京城...
    见习魔法师阅读 1,828评论 0 1
  • 翰H阅读 1,549评论 0 0
  • 虞美人~ 这是一张仰视的草稿。 铺一层底色,每一次铺完底色都有一种画完的感觉。可惜颜色比较淡。 画上茎叶,以及加上...
    54b4972e410d阅读 3,785评论 0 7

友情链接更多精彩内容