c与c++的区别(一)

来源:互联网 发布:知乎扫地机器人 编辑:程序博客网 时间:2024/05/18 10:35

最近在学习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)

0 0
原创粉丝点击