一步一步学习C++
根据《C++ primer》第五版 总结学习心得。
在实践中,不必全面地使用C++语言的各种特性,而应根据工程的实际情况,适当取舍(譬如动态类型信息,虚拟继承、异常等特性的使用,很值得商榷),通常只鼓励使用C++语言的一个子集就够了。
编程风格的,参考Google发布的 《 Google C++ Style Guide》。
C++语言的业界标准,从C++98到现在的C++11。C++之父 Bjarne Stroustrup说过,C++支持四种不同的编程风格:C风格、基于对象、面向对象和泛型。
书中提到的 C++进阶书籍,Scott Meyers的《Effective C++》,《C++ Concurrency in Action》是学习用标准C++开发并发程序的最佳选择,还有陈硕的《Linux多线程服务端编程》。
现代C++语言大体可以看做是三部分组成的:
1. 低级语言,大部分继承自C语言
2. 现代高级语言特性,允许我们定义自己的类型以及组织大规模程序和系统
3. 标准库,它利用高级特性来提供有用的数据结构和算法
定义的数据类型,不仅定义了数据元素的内容,还定义了这类数据上可以进行的运算。
标准库定义了4个IO对象,标准输入对象,类型为istream,名字为cin。
标准输出对象,类型为ostream,名字为cout。
类型为ostream,名字为cerr,用于输出警告和错误信息。
类型为ostream,名字为clog,输出程序运行时的一般性消息
标准库定义的所有名字都在命名空间std中,使用标准库的前提,是在程序开头添加using namespace std 这行语句。
C++语言规定 short <= int <= long <= long long ,C++规定了这些类型的最小字节数,具体字节由机器体系和编译器共同决定。
1: void test_read_many_number()
2: {
3: /**< 读取数量补丁的输入数据 */
4: int sum = 0;
5: int value = 0;
6: while( std::cin >> value)/**< 使用Cin作为检测条件,检测流的状态 如果流是有效的,那么检测成功
7: 当遇到文件结束符 或者 遇到一个无效输入(此例中,无效输入为不是一个整数)
8: istream对象的状态会变为无效
9: 在windows系统下,Ctrl+Z 等同于输入文件结束符
10: 在Unix系统下,Ctrl+D 等同于输入文件结束符
11:
12: 可以在命令行中,使得输入输出重定向到文件中去
13: "C++_Primer.exe" < ../../input.txt > a.txt
14: */
15: sum += value;
16:
17: std::cout << "The input sum is "<<sum <<std::endl;
18:
19: }
注意事项:切勿混用带符号类型和无符号类型。因为当表达式中,既出现无符号类型,又出现有符号类型,在进行运算时,有符号数会自动转换为无符号的数据,造成错误。
对于字符串的存储,编译器在每个字符串的结尾处,添加一个空字符’\0’,作为字符串结束标志。
对象的类型决定了对象所能参与的运算。
引用为对象起了另外一个名字,引用本身并非一个对象。
当编译时初始化方式定义了一个const对象时,编译器会在编译过程中,把用到该变量的地方都替换成对于的值。对于 const int bufSize = 512这句话来说,编译器会找到代码中所用用到bufSize的地方,然后用512来替换。默认情况下,const对象被设定为仅在本文件内有效。当多个文件中出现了同名的const变量时,相当于在不同文件中分别定义了独立的const变量。可以在const修饰的变量前面加extern关键字,这样就可以只需要定义一次,而在多个文件中共享。
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
一步一步学习C++的更多相关文章
- 12.Linux软件安装 (一步一步学习大数据系列之 Linux)
1.如何上传安装包到服务器 有三种方式: 1.1使用图形化工具,如: filezilla 如何使用FileZilla上传和下载文件 1.2使用 sftp 工具: 在 windows下使用CRT 软件 ...
- (转) 一步一步学习ASP.NET 5 (四)- ASP.NET MVC 6四大特性
转发:微软MVP 卢建晖 的文章,希望对大家有帮助.原文:http://blog.csdn.net/kinfey/article/details/44459625 编者语 : 昨晚写好的文章居然csd ...
- (转) 一步一步学习ASP.NET 5 (二)- 通过命令行和sublime创建项目
转发:微软MVP 卢建晖 的文章,希望对大家有帮助. 注:昨天转发之后很多朋友指出了vNext的命名问题,原文作者已经做出了修改,后面的标题都适用 asp.net 5这个名称. 编者语 : 昨天发了第 ...
- 一步一步学习SignalR进行实时通信_1_简单介绍
一步一步学习SignalR进行实时通信\_1_简单介绍 SignalR 一步一步学习SignalR进行实时通信_1_简单介绍 前言 SignalR介绍 支持的平台 相关说明 OWIN 结束语 参考文献 ...
- 一步一步学习SignalR进行实时通信_8_案例2
原文:一步一步学习SignalR进行实时通信_8_案例2 一步一步学习SignalR进行实时通信\_8_案例2 SignalR 一步一步学习SignalR进行实时通信_8_案例2 前言 配置Hub 建 ...
- 一步一步学习SignalR进行实时通信_9_托管在非Web应用程序
原文:一步一步学习SignalR进行实时通信_9_托管在非Web应用程序 一步一步学习SignalR进行实时通信\_9_托管在非Web应用程序 一步一步学习SignalR进行实时通信_9_托管在非We ...
- 一步一步学习SignalR进行实时通信_7_非代理
原文:一步一步学习SignalR进行实时通信_7_非代理 一步一步学习SignalR进行实时通信\_7_非代理 SignalR 一步一步学习SignalR进行实时通信_7_非代理 前言 代理与非代理 ...
- 一步一步学习SignalR进行实时通信_5_Hub
原文:一步一步学习SignalR进行实时通信_5_Hub 一步一步学习SignalR进行实时通信\_5_Hub SignalR 一步一步学习SignalR进行实时通信_5_Hub 前言 Hub命名规则 ...
- 一步一步学习SignalR进行实时通信_6_案例
原文:一步一步学习SignalR进行实时通信_6_案例 一步一步学习SignalR进行实时通信\_6_案例1 一步一步学习SignalR进行实时通信_6_案例1 前言 类的定义 各块功能 后台 上线 ...
- 一步一步学习SignalR进行实时通信_4_Hub
原文:一步一步学习SignalR进行实时通信_4_Hub 一步一步学习SignalR进行实时通信\_4_Hub SignalR 一步一步学习SignalR进行实时通信_4_Hub 前言 创建Hub 配 ...
随机推荐
- 一行命令搞定VS2012无法安装cocos2d-x-2.1.4及创建跨平台项目(二)
转自:http://blog.csdn.net/yangjingui/article/details/9418843 由于上次发了一个比较二的方法来解决VS2012无法安装cocos2d-x-2.1. ...
- c#winform将全局异常抛出,不用大量写try()catch()
一.在program.cs处完善成如下,但是这样后只能抛出主线程(UI)的错误,所以请看第二步 /// 应用程序的主入口点. /// </summary> [STAThread] stat ...
- 神马小说:使用opensearch打造高性能搜索服务
神马小说--- 使用opensearch打造高性能搜索服务 [使用背景] 神马小说是最早使用opensearch的用户,和opensearch一起成长.目前神马小说每天2亿搜索pv,1000w 用户. ...
- [算法练习]最长公共子串(LCS)
题目说明: 找两个字符串的最长公共子串,这个子串要求在原字符串中是连续的.比如"bab"和"caba"的最长公共子串是"ba"和" ...
- a 中调用js的几种方法
我们常用的在a标签中有点击事件:1. a href="javascript:js_method();" 这是我们平台上常用的方法,但是这种方法在传递this等参数的时候很容易出问题 ...
- redis存储对象,实体类新加字段空指针问题处理
redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(sorted set ...
- Oracle 常用命令大全
一.如何有效地利用数据字典 ORACLE的数据字典是数据库的重要组成部分之一,它随着数据库的产生而产生, 随着数据库的变化而变化, 体现为sys用户下的一些表和视图.数据字典名称是大写的英文字符. 数 ...
- C#中Invoke和BeginInvoke的区别
1.Invoke() 调用时,Invoke会阻止当前主线程的运行,等到 Invoke() 方法返回才继续执行后面的代码,表现出“同步”的概念. 2.BeginInvoke() 调用时,当前线程会启用线 ...
- page74-泛型可迭代的基础集合数据类型的API-Bag+Queue+Stack
[泛型可迭代的基础集合数据类型的API] 背包:就是一种不支持从中删除元素的集合数据类型——它的目的就是帮助用例收集元素并迭代遍历所有收集到的元素.(用例也可以检查背包是否为空, 或者获取背包中元素的 ...
- python 基础——常用日志装饰器
from functools import wraps class logit(): def __init__(self, logfile='out.log'): self.log = logfile ...