C/C++基础复习(一)变量与基本类型

C/C++ 2014年06月22日 ,

由于工作上的需要,最后对程序设计语言C/C++基础知识进行了温习,除了知识性的东西外还包括使用习惯、增强程序的可读性等内容。http://furzoom.com/

变量与基本类型

基本内置类型

Primitive Built-in Types

Type Implication Minimum  storage space
bool boolean NA
char character 8 bits
wchar_t wide character 16 bits
short short integer 16 bits
int integer 16 bits
long long integer 32 bits
float single-precision floating-point 6 significant digits
double double-precision floating-point 10 significant digits
long double extended-precision floating-point 10 significant digits

Integral types (except the boolean type) may be either signed or unsigned

Unlike other integral types, there are three distict types for char:

plain char equals to char

signed char

unsigned char

字面值常量

只有内置类型存在字面值,没有类类型的字面值。

20 // decimal
024 // octal
0x14 // hexadecimal

整数的字面值默认只有int和long类型。

可以强制转换字面常量为long、unsigned、signed类型。在常量后紧跟L、u、U等。

注意:不要使用小写字母l。没有short类型的字面值常量。

默认浮点数常量为double。可以在字面值常量后紧跟 F、f表示single-precision float-point。L表示extended-precision float-point。

布尔字面值常量为true和false。

字符字面值常量为单引号包含的字符(包含转义字符)如,'a'、'\n'都为char类型。在字符常量前使用L,如,L'a'为wchar_t类型。

非打印转义字符

Escape Implication Escape Implication
newline \n vertical tab \v
carriage return \r alert(bell) \a
question mark \? double quote \"
horizonal tab \t backspace \b
formfeed \f backslash \\
single quote \' - -

使用

\000

表示通用转义字符。ooo表示八进制数。

使用

\xddd

表示通用转义字符。ddd表示十六进制数。

字符串字面值采用双引号包含。字符串字面值经编译器自动在末尾添加一个空字符(\0)。

在字符串字面值前添加L表示宽字符串。

两个相邻的仅由空格、制表符、换行符分开的字符串字面值自动连接成一个字符串字面值。

注意:连接字符串字面值和字符串字面值是未定义行为。

变量

Lvalues和Rvalues

变量命名习惯:

  • 变量名一般用小写字母。
  • 变量名应应有实际意义。
  • 多个词语组成的变量名应在词语间加下划线(_)或者词语首字母大写。

变量定义时指定了初始值的对象称为是已初始化的。C++支持复制初始化直接初始化。如,

int ival(1024);  // direct-initialization
int ival = 1024;  //copy-initialization

注意:初始化不是赋值。初始化是创建变量并给它赋初值。赋值是擦除对象的当前值并用新值代替。

初始化类类型对象时,采用直接初始化的效率更高。对于内置类型来说,两者几乎没有差别。

未初始化的内置类型的全局变量由编译器自动初始化为0,局部的变量则是未定义的。

未初始化的类类型的对象由默认构造函数来实现初始化。

变量的定义用于为变量分配存储空间,还可以为变量指定初始值。在一个程序中,变量有且仅有一个定义。

声明用于向程序表明变量的类型和名字。定义也是声明。可以通过使用extern关键字声明变量名而不定义它。程序中变量可以声明多次,但只能定义一次。

只有当声明也是定义时,声明才可以有初始化式。因为只有定义才分配存储空间。初始化式必须要在存储空间来进行初始化。如果声明有初始化式,那么它将被当作是定义。如,

extern double pi = 3.14;   // definition

只有当extern声明位于函数外部时,才可以含有初始化式。

作用域是用来区分名字的不同意义的上下文。

定义在所有函数外部的名字具有全局作用域。否则为局部作用域

C++鼓励在对象首次使用的位置进行对象的定义。可读性强、易赋以有意义的初始化值。

const

const变量定义时必须进行初始化。const的确切含义应该为read only。

在全局作用域里定义的非const变量,在整个程序中都可以访问。全局作用域的const变量是文件的局部变量。即只在定义的文件内可见。

通过指定const变更为extern,可以在整个程序中访问const对象。

引用

引用就是对象的另一个名字。在实际程序中,引用主要用作函数的形式参数。

引用是一种复合类型,通过在变量名前添加&符号来定义。复合类型就是指用其他类型定义的类型。

引用必须用与该引用同类型的对象初始化,不能定义引用类型的引用 ,但可以定义任何其他类型的引用。如,

int ival = 1024;
int &refVal = ival;  // ok: refVal refers to ival
int &refVal1;            // error: a reference must be initialized
int &refVal2 = 10; // error: initialized must be an object
int &refVal3 = refval; // error: can't be initialized to a reference type

引用初始化后,只要该引用存在,就保持绑定到初始化时指向的对象。不能将引用绑定到另一个对象。

const引用是指向const对象的引用。如,

const int ival  = 1024;
const int &refVal = ival;  // ok: both reference and object are const
int &refVal1 = ival;       // error: non const reference to a const object

const引用是指向const的引用。

const引用可以使用不同类型的对象或者右值进行初始化。非const引用只能绑定到与该引用同类型的对象。如,

int i = 1024;
const int &refVal = 1024;        // legal for const references only
const int &refVal1 = refVal + i; // create temporary int from int

typedef

typedef定义现有数据类型的同义词,不引入新的类型。typedef使用有三种目的:

  • 为了隐藏特定类型的实现,强调使用类型的目的。
  • 复杂的类型定义,使其更易理解。
  • 允许一种类型用于多个目的,同时使得每次使用该类型的目的明确。

enum

枚举成员变量是常量。枚举成员值可以是不唯一的。如,

enum Points { point2d = 2,  //2

point2w,                 // 3

point3d = 3,         // 3

point3w };             // 4

使用时注意如下问题,


Points pt3d = point3d;  // ok: point3d is a Points enumerator

Points pt2w = 3;              // error: pt2w initialized with int

pt2w = polygon;              // error: polygon is not a Points enumerator

pt2w = pt3d;                    // ok: both are objects of Points enum type

每一个类都定义了一个接口和一个实现。

头文件

头文件一般包含类的定义、extern变量的声明和函数的声明。
头文件好处:

  • 保证所有文件的使用给定实体的同一声明。
  • 当声明需要修改时,只有头文件需要更新。

如果头文件较大,可以使用编译器提供的预编译头文件功能。

注意:由于头文件的可能被多个文件进行包含,头文件中不应该有变量和函数的定义。此时区分声明和定义是十分重要的。

但是,头文件可以定义类、值在编译时就已知道的const对象和inline函数。

terms

  • argument
  • block
  • buffer
  • built-in type
  • cerr
  • cin
  • class
  • class type
  • clog
  • comments
  • condition
  • cout
  • curly brace
  • data structure
  • edit-compile-debug
  • end-of-file
  • expression
  • for statement
  • function
  • function body
  • function name
  • header
  • if statement
  • iostream
  • istream
  • library type
  • main function
  • manipulator
  • member function
  • method
  • namespace
  • ostream
  • parameter list
  • preprocessor directive
  • return type
  • source file
  • standard error
  • standard input
  • standard library
  • standard output
  • statement
  • std
  • uninitialized variable
  • variable
  • while statement
  • () operator
  • ++ operator
  • += operator
  • . operator
  • :: operator
  • = operator
  • << operator
  • >> operator
  • == operator
  • != operator
  • <= operator
  • < operator
  • >= operator
  • > operator
  • access labels
  • address
  • arithmetic types
  • array
  • byte
  • class
  • class member
  • compound type
  • const reference
  • constant expression
  • constructor
  • copy-initialization
  • data member
  • declaration
  • default constructor
  • definition
  • direct-initialization
  • enumeration
  • enumerator
  • escape sequence
  • global scope
  • header
  • header guard
  • identifier
  • implementation
  • initialized
  • integral types
  • interface
  • link
  • literal constant
  • local scope
  • lvalue
  • magic number
  • nonconst reference
  • nonprintable character
  • object
  • preprocessor
  • private member
  • public member
  • reference
  • run time
  • rvalue
  • scope
  • separate compilation
  • signed
  • statically typed
  • struct
  • type-checking
  • type-specifier
  • typedef
  • undefined behavior
  • uninitialized
  • unsigned
  • variable initialization
  • void type
  • word

如无特别说明,本站文章皆为原创,若要转载,务必请注明以下原文信息:
日志标题:《C/C++基础复习(一)变量与基本类型》
日志链接:http://furzoom.com/c-cplusplus-primetive-knowledge/
博客名称:枫竹梦

发表评论

插入图片

NOTICE1:请申请gravatar头像,没有头像的评论可能不会被回复!

回到顶部