前言
大一的时候我就已经学过C++程序设计了,但是我从来不敢跟别人说我会C++。
事实上,平时里大多数时候我用的是C++里面C的部分,偶尔用一下类来封装(其实用struct也可以实现的)。
对于C++的特点,我一直没有很好的去学习,只是略知一二,所以在实际使用中常常会出现一些难以察觉的问题。
我举个很简单的例子,我们打算输出一个vector内的元素:
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<int> vc;
vc.push_back(1);
vc.push_back(2);
for (int i = -1; i < vc.size()-1; i++)
cout<<vc[i+1]<<endl;
return 0;
}
也许之前我们会以为这段代码完美无错,然而事实并非我们想的那样,结果是什么都没输出。
问题出在哪?如果你明白size()返回的是size_type类型,而该类型是unsigned的,那么就不会犯这种错误了。(同样的问题会出现在sizeof上)
另外,C++中main的返回值必须是int你是否知道?大部分iterator只能自增自减而不能像 i+=n 这样赋值?
C++的面向对象思想,范式编程,STL的源码实现,我都只是停留在“了解”的层面,这远远是不够的。
通常,只有在“熟悉”的情况下,我才敢将其写到简历上,跟别人说。
很多原因,促使我想要重新来学习C++,之前读过《C++ primer》,但是并没有读完,而且读到越后面越没耐心。
这一次,我希望自己能够一步一个脚印,把这本书啃下来,并将一些零散的,我自己认为需要注意的点在blog中记录下来,这也是敦促自己学习的一种方式。
与此同时,我将开始阅读STL的部分源码,很期待能够获取新知。
第一章 快速入门
1.对于main函数,返回类型必须是int型,返回值是一个状态指示器,0表示成功,非0由操作系统定义。UNIX中可以通过下面命令获取状态:
$ echo $?
2.标准库定义了4个IO对象:cin,cout,cerr,clog;(cerr默认不缓冲,clog默认带缓冲)
3.输出操作返回的值是输出流本身:
std:cout<<