《C++ Primer(第五版)》知识巩固
运行平台:ubuntu 12.04/GCC 4.8.0
第二章:基本内置类型
1.decltype类型指示符
当我们从表达式的类型来推断要定义的类型时,可以使用decltype()来解析;decltype与auto不同,decltype应用于变量,返回该变量的类型。
string s("Hello World!!!");
// punct_cnt has the same type that s.size returns
decltype(s.size()) punct_cnt = 0;
2.转义序列
\xxx 八进制
\x(xxx) 十六进制
unsigned char c = -1; // assuming 8-bit chars, c has value 255
i = c; // the character with value 255 is an unprintable character
// assigns value of c (i.e., 255) to an int
std::cout << i << std::endl; // prints 255
unsigned u = 10;
int i = -42;
std::cout << i + i << std::endl; // prints -84
std::cout << u + i << std::endl; // if 32-bit ints, prints 4294967264
3.getline()的使用
string line; // read input a line at a time until end-of-file
while (getline(cin, line))
cout << line << endl;
4.str.size()返回为string::size_type类型,这是标准库与机器无关的特性之一。
如下面这个例子,输入大小在0-15之间的数字,求其对应的十六进制符号:
const string hexdigits = "0123456789ABCDEF"; // possible hex digits cout << "Enter a series of numbers between 0 and 15"
<< " separated by spaces. Hit ENTER when finished: "
<< endl;
string result; // will hold the resulting hexify'd string string::size_type n; // hold numbers from the input
while (cin >> n)
if (n < hexdigits.size()) // ignore invalid input
result += hexdigits[n]; // fetch the indicated hex digit cout << "Your hex number is: " << result << endl;
而与之相关的则是size_t类型,size_t是标准C库中定义的,应为unsigned int,在64位系统中为 long unsigned int。
#include <cstddef>
using std::size_t; constexpr size_t rowCnt = 3, colCnt = 4;
int ia[rowCnt][colCnt]; // 12 uninitialized elements // for each row
for (size_t i = 0; i != rowCnt; ++i) {
// for each column within the row
for (size_t j = 0; j != colCnt; ++j) {
// assign the element's positional index as its value
ia[i][j] = i * colCnt + j;
}
}
第四章:表达式
1.值的溢出
思考下面运算的结果:
short short_value = 32767; // max value if shorts are 16 bits short_value += 1; // this calculation overflows
cout << "short_value: " << short_value << endl;
第六章:函数
1.返回数组指针的函数,这三种表达方式,留意:
int *p = elemPtr(6); // p points to an int
int (*arrP)[5] = arrPtr(5); // arrP points to an array of five ints
int (&arrR)[5] = arrRef(4); // arrR refers to an array of five ints / two arrays
int odd[] = {1,3,5,7,9};
int even[] = {0,2,4,6,8}; // function that returns a pointer to an int in one of these arrays
int *elemPtr(int i)
{
// returns a pointer to the first element in one of these arrays
return (i % 2) ? odd : even;
} // returns a pointer to an array of five int elements
decltype(odd) *arrPtr(int i)
{
return (i % 2) ? &odd : &even; // returns a pointer to the array
} // returns a reference to an array of five int elements
int (&arrRef(int i))[5]
{
return (i % 2) ? odd : even;
}
2.含有可变参数的函数
在C11中提供了两种方法:如果参数类型相同,可以传递一个名为initializer_list的标准库类型;如果类型不同,可以使用可变参数模版,见16章。使用方法如下:
// overloaded version takes only a list of strings
void error_msg(initializer_list<string> il)
{
for (auto beg = il.begin(); beg != il.end(); ++beg)
cout << *beg << " " ;
cout << endl;
} string expected = "description", actual = "some other case";
initializer_list<int> li = {0,1,2,3}; // expected, actual are strings
if (expected != actual)
error_msg({"functionX", expected, actual});
else
error_msg({"functionX", "okay"});
3.函数指针
C11中尾置返回类型,如声明如下:
// use trailing return type
auto getFcn(const string&) -> string::size_type(*)(const string&, const string&);
而函数指针的另外两种声明定义,一种是()括号解析,另一种则是借用decltype确定返回类型为函数指针类型,使用如下:
decltype(sumLength) *getFcn(const string &); // direct definition
string::size_type (*getFcn(const string&))(const string&, const string&); // define getFcn
decltype(sumLength)*
getFcn(const string &fetch)
{
if (fetch == "sum")
return sumLength;
return largerLength;
}
《C++ Primer(第五版)》知识巩固的更多相关文章
- 实验楼课程管理程序-深入学习《C++ Primer第五版》实验报告&学习笔记1
本片博客为实验楼的训练营课程深入学习<C++ Primer第五版>的实验报告和学习笔记. 原课程地址为:https://www.shiyanlou.com/courses/405# 原文出 ...
- C++ 11 从C++ primer第五版的学习笔记
1. auto (page107) auto 推断会忽略const const int ci = i, & cr = ci; auto b = ci; // b is an int (to ...
- C++PRIMER第五版练习题答案第一章
C++PRIMER第五版练习题答案第一章 应该有很多小伙伴和我一样,闲来无事买了本C++的书自己啃,课后的练习题做的很揪心,这里我分享下我写的答案,希望能帮助到你,提供源码,就不跑了哈,毕竟现在是第一 ...
- C++Primer第五版学习笔记
<C++ Primer>Learning Note 程序实例下载地址:http://www.informit.com/title/0321714113 第一章 开始 ...
- C++Primer第五版——习题答案和解析
感谢原文博主的分享:https://blog.csdn.net/misayaaaaa/article/details/53786215 新手入门必看的书.知识是一个系统化并且相互关联的体系,零散的东西 ...
- C++学习书籍推荐《C++ Primer 第五版 (英文)》下载
百度云及其他网盘下载地址:点我 编辑推荐 <C++ Primer(英文版)(第5版)>是全球最畅销的C++图书.这本久负盛名的C++经典教程,时隔八年之久,终迎来的重大升级.除令全球无数程 ...
- C++Primer第五版——习题答案目录
目前正在刷<C++Primer>这本书,会在博客上记录课后习题答案,答案仅供参考. 因为水平有限,如有有误之处,希望大家不吝指教,谢谢! 目录地址 使用的系统为:win 10,编译器:VS ...
- C++ primer第五版随笔--2015年1月6日
记录自己看这本书时的一些内容. 一.引用(reference) 引用为对象起了另外一个名字.例如: int ival=1024: int &relVal1=ival;//对,注意尽量不要用这方 ...
- C++Primer第五版——习题答案详解(一)
习题答案目录:https://www.cnblogs.com/Mered1th/p/10485695.html 第1章 开始&&第2章 变量和基本类型 练习1.3 #include&l ...
- C++Primer第五版——习题答案详解(二)
习题答案目录:https://www.cnblogs.com/Mered1th/p/10485695.html 第3章 字符串.向量和数组 练习3.2 一次读入一整行 #include<iost ...
随机推荐
- OpenCV源码解析
OpenCV K-means源码解析 OpenCV 图片读取源码解析 OpenCV 视频播放源码解析 OpenCV 追踪算法源码解析 OpenCV SIFT算法源码解析 OpenCV 滤波源码分析:b ...
- Opengl中的GLUT下的回调函数
void glutDisplayFunc(void (*func)(void)); 注册当前窗口的显示回调函数 参数: func:形为void func()的函数,完成具体的绘制操作 这个函数告诉GL ...
- Linq分组操作之GroupBy,GroupJoin扩展方法源码分析
Linq分组操作之GroupBy,GroupJoin扩展方法源码分析 一. GroupBy 解释: 根据指定的键选择器函数对序列中的元素进行分组,并且从每个组及其键中创建结果值. 查询表达式: var ...
- 'System.ValueTuple, Version=0.0.0.0 required for Add-Migration on .NET 4.6.1 Class Library
https://stackoverflow.com/questions/45978173/system-valuetuple-version-0-0-0-0-required-for-add-migr ...
- JAVA篇之环境安装(Windows)
一.JAVA 安装两个重要概念 1.JRE::英文Java Development Kit ,记住英文,深入理解就去看相关文章. 2.JDK:英文 Java Runtime Environment,记 ...
- C#多线程学习(五) 多线程的自动管理(定时器)
Timer类:设置一个定时器,定时执行用户指定的函数. 定时器启动后,系统将自动建立一个新的线程,执行用户指定的函数. 初始化一个Timer对象: Timer timer ...
- ANE打包心得
1 ane中的p12证书是fb或者flashide中生成的(例如air工程生成的p12),不是苹果账号的p12 2 打包bat中的 -platform 要和 extension.xml中的platfo ...
- vc6.0 Buile菜单下 Profile的作用
Profile的作用 帮助你分析并发现程序运行的瓶颈,找到耗时所在,同时也能帮助你发现不会被执行的代码.从而最终实现程序的优化. Profile的组成 Profile包括3个命令行工具:PREP,PR ...
- 为什么程序员都不喜欢使用switch而使用if来做条件跳转
请用5秒钟的时间查看下面的代码是否存在bug. OK,熟练的程序猿应该已经发现Bug所在了,在第8行和第10行下面我没有添加关键字break; 这就导致这段代码的行为逻辑与我的设计初衷不符了. 缺 ...
- “全栈2019”Java第七十四章:内部类与静态内部类相互嵌套
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...