最近在学习c++,很多人都说C++是c的扩充,但是我认为这两种语言虽说前面的语法是差不多的,但是后期的编程包括思想都是不同的。我觉得以<c++ prime>这本书为我的学习书目,总结一些c和c++不同的地方,当然也有一些是以前我没有注意到的地方,不代表c中没有这种特性。
1.main()函数的返回类型必须为int,即整数类型。int类型是一种内置类型,即语言自身定义的类型。
2.在大多数系统中,main的返回值被用来指示状态。返回值0表示成功,非0的返回值含义由系统定义,通常指出错误类型。3.c++中使用iostream库,包含istream和ostream两个基础库,分别表示输入流和输出流。
4.定义了4个IO对象,cin和cout称为标准输入输出。用cerr来输出警告和错误消息,也称为标准错误。clog用来输出程序运行时的一般性信息。
5.endl是一个被称为操纵符的特殊值,目的是结束当前行,并将与设备关联的缓冲区的内容刷到设备中。
6.命名空间可以帮助我们避免名字定义冲突,以及使用库中相同名字导致的冲突。标准库定义的所有名字都在命名空间std中。我们可以通过作用域运算符::来使用名字,例如:std::cout,或者我们也可以using声明来声明命名的空间。形式如下:
using namespace::name;
一旦有了这种声明我们就可以直接访问名字了。
#include <iostream>
using std::cin;
int main()
{
int i;
cin >> i; //使用using声明后
std::cin >> i; //未使用using声明前
return 0;
}
而且头文件中不应该包含using声明,因为头文件的内容会拷贝到引用它的文件中,会导致名字冲突。
但是,这样还是有些麻烦,我们还可以使用using namespace std;这种方式,可以避免我们一个一个区声明命名空间的名字。同样对于一些比较长的命名空间我们也可以使用别名简化它。比如:namespace prime = cplusplus_prime,这样就可以用prime代替cplusplus_prime。
7.读取数量不定的输入数据
#include <iostream>
using namespace std;
int main()
{
int sum = 0, value = 0;
while (cin>>value)
{
sum += value;
}
cout << "sum is:" << sum << endl;
return 0;
}
8.文件结束标志,在windows中,输入文件结束符的方法是敲ctrl+z,然后按Enter键或Return键。在UNIX中,文件结束符输入用ctrl+d。9.定义了新的类型long long 是长整形,最小为64位.
10.把一个非布尔类型的值赋给布尔类型时,初始值为0则结果为false,否则结构为true。
把一个布尔类型的值赋给非布尔类型时,初始值为false则结果为0,初始值为true则结果为1.
11.初始化不是赋值,初始化的含义是创建变量时赋予其一个初始化,而赋值的含义是把对象的当前值擦除,而以一个新值来代替。
12,.在c++中一个变量的初始化有以下几种方法
int n = 0;
int n = { 0 };
int n(0);
int n{ 0 };
其中在c++11标准中,用花括号的初始化得到的全面的应用。
如果没有进行初始化,那么变量会被默认初始化,默认初始化的值会根据变量的位置而决定,定义于任何函数体之外的变量被初始化为0。
注意:为了防止无法预料到的错误,建议初始化每一个内置类型的变量。
13.c++是一种静态类型语言,其含义是在编译阶段检测类型。
14.定义引用时,程序把引用和它的初始化值绑定在一起,而不是将初始值拷贝给引用。因为无法重新绑定另外一个对象,因此引用必须被初始。引用只能绑定在对象上,而不能绑定某个具体的值。所有引用的类型都要和绑定的类型相匹配,但是有两个例外:
1.在初始化常量引用时,允许用任意表达式作为初始值,只要改表达式的结果能转换成引用类型即可。
int i = 42;
const int &r1 = i; //正确
const int &r2 = 42; //正确
const int &r3 = r1 * 2; //正确
int &r4 = r1 * 2; //错误:r4是一个普通的非常量引用
2.在类的继承中,我们可以将基类的引用绑定到派生类对象上。
15.面对一条比较复杂的指针或引用的声明语句时,从右向左阅读有助于弄清楚它的真实含义。
16.c++11标准规定,允许将变量声明为constexpr类型以便让编译器来验证变量的值是否是一个常量表达式。声明为constexpr的变量一定是一个常量,而且必须用常量表达式初始化。
17.在c语言中常用关键字typedef表示类型同名。在c++11标准中,规定了一种新的方法,使用别名声明来定义类型的别名:
using SI = int ; //SI是int的同义词
18.c++11新标准引入了auto类型说明符,用它能让编译器去替我们分析表达式所属的类型。
auto item = val1 + val2; //item初始化为val1和val2相加的结果,从val1和val2的类型推断出item的类型。
19.c++11新标准规定,可以为数据成员提供一个类内初始值。创建对象时,类内初始值将用于初始化数据成员。没有初始值得成员将被默认初始化。(默认初始化:函数内变量的值跟变量的位置有关,函数外变量的值为0)