【C++】C++基础语法
1.typedef
typedef 用于给一个已有的类型取一个新名字。语法:
typedef type newname;
//例如
typedef int www;
www a; //a 就是 int 型的变量
2.枚举类型
这是c++中的一种派生数据类型,是用户定义的若干枚举常量的集合。如果一个变量只有有限的几种取值情况,就可以定义为枚举类型。“枚举”就是将变量的值一一列出来,后续该变量的取值只能是这些值中的一个。使用关键字 enum,语法如下:
enum 枚举名{
标识符[=整型常数],
标识符[=整型常数],
...
标识符[=整型常数]
} 枚举变量;
例如:
#include <iostream>
using namespace std;
int main()
{
enum color { red, orange, green=5, blue } c;
c = orange;
cout << c << endl;
c = blue;
cout << c << endl;
return 0;
}
output: 1
6
当不赋予标识符初值时则按顺序从 0 开始,如果赋予初值,则接下来标识符的值按照前一个值 +1 的顺序向下。
3.变量类型
变量名声明的时候大小写是不同的,因为 c++ 是大小写敏感的。
4.C++变量作用域
局部变量
在函数或一个代码块内部声明的变量。它们只能被函数内部或者代码块内部的语句使用。
定义后系统不会对其自动进行初始化,所以一定要赋初值。
全局变量
定义在所有函数之外的变量,一般定义在程序的头部,其在整个程序周期内都是有效的,它可以被任何函数访问。在一个程序中,局部变量和全局变量的名称可以一样,但是在局部变量所在的内部,局部变量的值会覆盖全局变量的值。
定义后若不赋初值,则系统会自动对其进行初始化。
int 0
char '\0'
float 0
double 0
pointer NULL
5.C++常量
常量可以是任何基本数据类型,其值定义以后不可更改。
常量有整数常量,浮点常量,布尔常量,字符常量,字符串常量。
字符常量是括在单引号中。如果常量以 L(仅当大写时)开头,则表示它是一个宽字符常量(例如 L’x’),此时它必须存储在 wchar_t 类型的变量中。否则,它就是一个窄字符常量(例如 ‘x’),此时它可以存储在 char 类型的简单变量中。
定义常量的两种简单的方式:
- 使用 #define 预处理器
- 使用 const 关键字
#define预处理器
#define 关键字一般放在程序的最开始,定义全局变量。
#define identifier value
const 关键字
const 一般用在函数内,定义局部变量。
const type variable = value
一般把常量定义为大写。
6.C++修饰符类型
c++允许在基本数据类型前放置修饰符,其用于改变基本类型的含义,适用于更多场景。
- signed
- unsigned
- long
- short
7.C++存储类
- register 存储类
用于定义存储在寄存器而不是 RAM 中的局部变量,不能对其进行 ‘&’ 操作,用 register 定义并不一定存在寄存器中,这取决于硬件等。
{
register int miles;
}
- static 存储类
static 指示编译器在程序的生命周期内保持局部变量的存在,而不需要在每次进入和离开作用域时进行销毁和创建。因此使用 static 可以使局部变量在函数调用之间保持局部变量的值。
static 也可以修饰全局变量,当 static 修饰全局变量时其作用域限制在声明其的文件内。
在 C++ 中,当 static 用在类数据成员上时,会导致仅有一个该成员的副本被类的所有对象共享。 - extern 存储类
extern 存储类用于提供一个全局变量的引用,全局变量对所有的程序文件都是可见的。当使用 ‘extern’ 时,对于无法初始化的变量,会把变量名指向一个之前定义过的存储位置。
当有多个文件且定义了一个可以在其他文件中使用的全局变量或函数时,可以在其他文件中使用 extern 来得到已定义的变量或函数的引用。可以这么理解,extern 是用来在另一个文件中声明一个全局变量或函数。extern 修饰符通常用于当有两个或多个文件共享相同的全局变量或函数的时候。
例如:
// main.cpp
#include <iostream>
int count ;
extern void write_extern();
int main()
{
count = 5;
write_extern();
}
// support.cpp
#include <iostream>
extern int count;
void write_extern(void)
{
std::cout << "Count is " << count << std::endl;
}
output: Count is 5
- thread_local 存储类
使用 thread_local 说明符声明的变量仅可在它在其上创建的线程上访问。 变量在创建线程时创建,并在销毁线程时销毁。 每个线程都有其自己的变量副本。thread_local 说明符可以与 static 或 extern 合并。可以将 thread_local 仅应用于数据声明和定义,thread_local 不能用于函数声明或定义。
thread_local int x; // 命名空间下的全局变量
class X
{
static thread_local std::string s; // 类的static成员变量
};
static thread_local std::string X::s; // X::s 是需要定义的
void foo()
{
thread_local std::vector<int> v; // 本地变量
}
以上参考自菜鸟教程。