本文用来记录C++的一些基本特性,相对于笔者学过的C语言知识而言。
- 枚举类型(enumeration)
可以用于限定枚举变量的取值范围在所列举的范围之中。
用法:
enum 枚举名{
标识符[=整型常数],
标识符[=整型常数],
…
标识符[=整型常数]
} 枚举变量;
-
C++存储类
-
auto(自动判断变量数据类型,C++11已经弃用)
-
register
用于定义存储在寄存器中而不是 RAM 中的局部变量,**不能使用"&"**因为没有内存位置 -
static
static 存储类指示编译器在程序的生命周期内保持局部变量的存在,而不需要在每次它进入和离开作用域时进行创建和销毁。因此,使用
static 修饰局部变量可以在函数调用之间保持局部变量的值。 static 修饰符也可以应用于全局变量。当 static
修饰全局变量时,会使变量的作用域限制在声明它的文件内。- extern
当您有多个文件且定义了一个可以在其他文件中使用的全局变量或函数时,可以在其他文件中使用 extern来得到已定义的变量或函数的引用。可以这么理解,extern 是用来在另一个文件中声明一个全局变量或函数。
(后两个暂且不记录)
- mutable
- thread_local (C++11)
-
-
位运算符:&、 | 和 ^,表示与或非,用于对每一位做运算
-
成员运算符:.(点)或者->,用于引用类、结构和共用体的成员。
-
函数参数的默认值设定:通过在形参使用赋值符号=来设置默认参数,当对应参数的输入值为空,则使用默认参数。示例如下:
int sum(int a, int b=20)//b的默认参数则为20
{
int result;
result = a + b;
return (result);
}
- Lambda函数:即匿名函数,感觉就像是一个简略方便版的函数,具体内容没有深究,目前不怎么会用到。表达式如下:
[capture](parameters)->return-type{body}
-
C++函数库自带的常用数学函数:
- double floor(double);
该函数返回一个小于或等于传入参数的最大整数。 - double hypot(double, double);
该函数返回两个参数的平方总和的平方根,也就是说,参数为一个直角三角形的两个直角边,函数会返回斜边的长度。 - double pow(double, double);
假设第一个参数为 x,第二个参数为 y,则该函数返回 x 的 y 次方。
- double floor(double);
-
C++随机数生成:
主要使用srand()和rand(),前者必须先调用,然后后者才可生成随机数,随机数生成常和用于获取系统时间的**time()**函数一同使用。
注意,这些函数要用到特定的头文件。
示例如下:
#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;
int main ()
{
int i,j;
// 设置种子
srand( (unsigned)time( NULL ) );
/* 生成 10 个随机数 */
for( i = 0; i < 10; i++ )
{
// 生成实际的随机数
j= rand();
cout <<"随机数: " << j << endl;
}
return 0;
}
- C++的引用
引用非常类似指针,但是它的本质更像是变量的另一个名字,即指向同一内存的另一个标签。引用可以作为参数被返回,又或者作为参数传给函数,值得注意的是,由于引用的特性,返回一个对局部变量的引用是不合法的,但是,可以返回一个对静态变量的引用。
引用很容易与指针混淆,它们之间有三个主要的不同:
- 不存在空引用。引用必须连接到一块合法的内存。
- 一旦引用被初始化为一个对象,就不能被指向到另一个对象。指针可以在任何时候指向到另一个对象。
- 引用必须在创建时被初始化。指针可以在任何时间被初始化。
引用的格式如下:
int& r = i;
double& s = d;
- C++时钟和日期:
C++提供用于表示时间和日期的数据类型:
四个与时间相关的类型:clock_t、time_t、size_t 和 tm。
C++的标准函数库提供时钟和日期的数据类型和相关函数,计算函数运行时间的函数可能在调试和监测性能上用的比较多,在此处列出:
clock_t clock(void);
//该函数返回程序执行起(一般为程序的开头),处理器时钟所使用的时间。如果时间不可用,则返回 -1。
- C++基本输入输出:cin,cout,cerr,clog
前两个很常用,不赘述,后两个分别是标准错误流和标准日志流。它们之间存在区别,cerr对象是非缓冲的,会立即输出;clog对象是缓冲的,需要等到缓冲区刷新或者满了才输出。
在编写和执行大型程序时,它们之间的差异就变得非常明显。所以良好的编程实践告诉我们,使用 cerr 流来显示错误消息,而其他的日志消息则使用 clog 流来输出。
下一篇用来写C++的面向对象,以使文章更有条理。
(文中所涉及的学习资料基本均来自“菜鸟教程”:www.runoob.com)