散乱知识点1

来源:互联网 发布:ip网络广播控制中心 编辑:程序博客网 时间:2024/05/29 14:18

1.stdio.h 和 cstdio
在C语言中,stdio.h是主要的,而C只是C++的一个子集,且C++中已不推荐再使用C的类库。但是为了对已有代码的保护,还是对原C中的类库提供支持。
cstdio 是C++从C的 stdio.h继承而来的,在前面加c同时去掉后缀h。两者的内容是一样的,只是cstdio的头文件中定义的名字被定义在命名空间std中。如果使用stdio.h文件,需要区分哪些是C++特有的,哪些是从C中继承过来的(也就是区分C++和C代码,同时谨慎处理两者间的兼容性)。所以建议在C++代码中尽量避免使用C风格的代码。

2.(#pragma once )
(#pragma once)是一个比较常用的C/C++杂注,只要在头文件的最开始加入这条杂注,就能够保证头文件只被编译一次。#pragma once是编译器相关的,有的编译器支持,有的编译器不支持,具体情况请查看编译器API文档,不过现在大部分编译器都有这个杂注了。
(#ifndef,#define,#endif)是C/C++语言中的宏定义,通过宏定义避免文件多次编译。所以在所有支持C++语言的编译器上都是有效的,如果写的程序要跨平台,最好使用这种方式。

3.size_type(string)vector类型同理
从逻辑上来讲,size()成员函数似乎应该返回整型数值,但事实上,size操作返回的是string::size_type类型的值。string类类型和许多其他库类型都定义了一些伙伴类型(companion types)。这些伙伴类型使得库类型的使用是机器无关的(machine-independent)。size_type就是这些伙伴类型中的一种。它定义为与unsigned型(unsigned int或unsigned long)具有相同的含义,而且可以保证足够大可存储任意string对象的长度。为了使用由string类型定义的size_type类型,程序员必须加上作用域操作符来说明所使用的size_type类型是由string类定义的。
特别重要的是,不要把size的返回值赋给一个int变量。虽然我们不知道string::size_type的确切类型,但可以知道它是unsigned型。对于任意一种给定的数据类型,它的unsigned型所能表示的最大正数值比对应的signed要大一倍。这个事实表明size_type存储的string长度是int所能存储的两倍。使用int变量的另一个问题是,有些机器上int变量的表示范围太小,甚至无法存储实际并不长的string对象。如在有16位int型的机器上,int类型变量最大只能表示32767个字符的string对象。而能容纳一个文件内容的string对象轻易就会超过这个数字。因此,为了避免溢出,保存一个string对象size的最安全的方法就是使用标准库类型string:: size_type。

原创粉丝点击