《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 ...
随机推荐
- 编写高质量代码改善C#程序的157个建议——建议129:泛型类型参数要以T作为前缀
建议129:泛型类型参数要以T作为前缀 作为一种约定,泛型类型的参数要以T作为前缀.如委托声明: Action<T1,T2> 其中,泛型类型参数名不应该处理成: Action<Arg ...
- JavaScript中两种类型的全局对象/函数【转】
Snandy Stop, thinking is the essence of progress. JavaScript中两种类型的全局对象/函数 这里所说的JavaScript指浏览器环境中的包括宿 ...
- 【Linux】Linux各文件夹说明
转载 /bin/ — 用来贮存普通命令. /sbin/ — 许多系统命令(例如 shutdown)的贮存位置.属于基本的系统命令,如shutdown,reboot,用于启动系统,修复系统./sbin目 ...
- XJOI 3606 最大子矩形面积/LightOJ 1083 Histogram(单调栈/笛卡尔树)
A histogram is a polygon composed of a sequence of rectangles aligned at a common base line. The rec ...
- 小程序:web-view采坑指南
最近负责开发的[广州医保查询]小程序已经发布上线,其中使用web-view组件完成的[在线绑定社保卡]核心流程,遇到了一些坑,现总结如下: 首先,让我们一起看看什么是web-view ? 小程序api ...
- ubantu18.04 配置nginx与uwsgi
一.首先先安装nginx静态服务 先更新 sudo apt-get update 1.安装gcc g++的依赖库 sudo apt-get install build-essential && ...
- 洛谷P3706 [SDOI2017]硬币游戏(概率生成函数+高斯消元)
题面 传送门 题解 不知道概率生成函数是什么的可以看看这篇文章,题解也在里面了 //minamoto #include<bits/stdc++.h> #define R register ...
- jquery中的正则表达式
1.什么是正则表达式: 能让计算机读懂的字符串匹配规则. 2.正则表达式的写法: var re=new RegExp('规则', '可选参数');var re=/规则/修饰参数; 3.规则中的字符 1 ...
- 浏览器性能接口performance.timing说明
原文来自于 https://dvcs.w3.org/hg/webperf/raw-file/tip/specs/NavigationTiming/Overview.html 下图描述了该接口的各个时间 ...
- TP5.0学习历程(1)
验证码的使用 控制器代码如下: $captcha = new \think\captcha\Captcha(); if (!$captcha->check($data['code ...