
C++
abnerwang_smile
主力博客http://abnerwang.github.io/
展开
-
C++ 类知识部分小结
参见我的思维导图:原创 2014-06-04 20:57:49 · 788 阅读 · 0 评论 -
C++ 中字面值和 string 对象相加
我的主力博客:半亩方塘标准库允许把字符串字面值和字符字面值转换为 string 对象,当把 string 对象和字符字面值以及字符串字面值混在一条语句中使用时,必须确保加法运算符( + )的两侧运算对象至少有一个是 string:string s1 = "hello", s2 = "world";string s3 = s1 + ", " + s2 + '\n';string原创 2014-04-06 15:36:43 · 8138 阅读 · 0 评论 -
C++ 中的处理类型
一、类型别名有两种方法可以定义类型别名:typedef double wages; // wages 是 double 的同义词typedef wages *p; // p 是 double* 的同义词新标准规定了一种新的方法:using SI = Sales_item; // SI 是 Sales_item 的同义词 类型别名和类型名等价,只要是类型原创 2014-04-01 20:46:34 · 1252 阅读 · 0 评论 -
void* 指针
void* 指针是一种特殊的指针类型,可以存放任意对象的地址,一个 void* 指针存放着一个地址,这一点和其他指针类似,不同的是,我们对该地址中到底是个什么类型的对象并不了解:double obj = 3.14, *pd = &obj;void *pv = &obj; // 正确:void* 能存放任意类型对象的地址 pv = pd; // pv 可以存放任意类型的指针原创 2014-03-27 10:22:31 · 1220 阅读 · 0 评论 -
C++ 中的转义序列
本文来简单地谈谈 C++ 的转义序列,有两类字符程序员不能直接使用,第一类是不可打印的字符,如换行符,响铃符,制表符等等,这些字符没有办法通过直接输入得到直接的输出,第二类是在 C++ 中有特殊含义的字符,这类字符同样没有办法通过直接输入得到直接的输出,这两类字符都只能通过转义序列进行实现,C++ 语言规定的转义序列包括:在程序中,以上转义序列被当作一个字符使用我们原创 2014-03-12 18:05:57 · 5398 阅读 · 0 评论 -
C++ 中的基本内置类型以及编程过程中对于类型的选择建议
我的主力博客:半亩方塘 C++ 中定义了包括 算术类型 和 空类型 在内的数据类型,空类型一般只用于特定的场合,例如在程序运行完毕后补要求返回任何值时,可对函数类型用空类型,算术类型总的来说包括两个方面:整型(包括字符型以及布尔型在内) 和 浮点型,C++ 标准只是规定了算术类型所占的最小比特位:不同的编译器可以给予这些算术类型比以上这些标原创 2014-03-07 14:22:50 · 1270 阅读 · 0 评论 -
C++ 中含有无符号类型的表达式
对于一个无符号类型和一个有符号类型的加法问题,参见 C++ 中有符号类型到无符号类型的转换 ,下面我们来谈谈一个无符号类型减去一个值的情形,首先看下面的代码:运行结果如下:i - j 所得到的结果很好理解,42 - 10 = 32,不多说了,那么,j - i ,即 10 - 42 为何不是 -32 ,而是 4294967264 呢?这是因为,当一原创 2014-03-07 13:36:23 · 1482 阅读 · 0 评论 -
C++ 中有符号类型到无符号类型的转换
为了更好地解释下面的代码,先来介绍一些背景知识,在我的计算机中, char 类型占 8 个比特位,那么, unsigned char 类型能表示的数的范围为 0 ~ 2的8次方 - 1,即 0 ~ 255,共 256 个数;int 类型占 32 个比特位,那么 unsigned 类型所能表示的数的范围为 0 ~ 2的32次方 - 1,即 0 ~ 4294967295,共 4294967296原创 2014-03-06 21:54:35 · 8638 阅读 · 0 评论 -
C++ Primer 中文版第五版错误(持续更新中)
这篇文章是对 《C++ Primer 中文版第5版》 中错误的列举,会随着时间的推移持续更新1. P16:练习 1.19,“修改你为 1.4.1 节练习 1.10” 改为 “修改你为 1.4.1 节练习 1.11”2. P21:1.6 书店程序中,第5行的注释 // 保存下一条交易记录的变量 和第8行的注释 // 保存和的变量 互相交换位置我的主力博客:半亩方塘原创 2014-03-06 12:27:47 · 5417 阅读 · 2 评论 -
有关C++输入,类,文件重定向的使用和成员函数的简单小结
1. 读取数量不定的输入数据在日常生活中,我们经常需要处理的是输入数据量不确定的数据,那么,在 C++ 语言中怎样将这些数量不确定的数据一一输入到计算机呢?譬如,我们输入不定量的数据后,求这些数据的和, C++ 中是怎么实现的呢?说来也很简单,看看下面的代码吧:#include int main(){ int sum = 0, val = 0; /* 变量的初始化 */原创 2014-03-01 23:32:13 · 1648 阅读 · 0 评论 -
使用迭代器进行二分搜索
我的主力博客:半亩方塘使用迭代器进行二分搜索是迭代器运算的一个经典案例之一,二分搜索是指在给定的 有序序列 中查找某个想要的元素的过程:首先给出二分搜索的查找范围,然后通过计算得到所给范围中的中间位置元素的值,如果这个中间元素的值与所要查找的元素值相等,则搜索成功,程序完成,否则,比较这个中间元素的值与所要搜索的值的大小,倘若所要搜索的值大于这个中间元素的值,则所要搜索的值应该在这原创 2014-04-18 15:31:03 · 2349 阅读 · 0 评论 -
string 对象与 C 风格字符串的混用
我的主力博客:半亩方塘所谓 C 风格的字符串即 以空字符结束的字符数组 。下面定义了一个 string 对象:string s("Hello World");允许使用字符串字面值来初始化 string 对象,更一般的情况下,能够出现字符串字面值的地方都能出现以空字符结束的字符数组:允许以空字符结束的字符数组来初始化 string 对象或者为 stri原创 2014-04-19 18:37:17 · 1266 阅读 · 0 评论 -
使用数组来初始化 vector 对象
使用数组来初始化 vector 对象,只需要 指明拷贝区域的首元素地址和尾后地址就可以了,下面通过两组程序及其运行结果来深入理解一下:程序一:#include #include #include using std::vector;using std::begin;using std::end;using std::cout;using std::endl;原创 2014-04-19 19:15:58 · 21987 阅读 · 1 评论 -
处理字符串的字符数组和字符指针
我的主力博客:半亩方塘我们知道,字符数组和字符指针都可以用来处理字符串,例如下面的两条语句都是正确的:char *p = "abc";char a[4] = "abc";第二行代码大家都知道是正确的,下面我主要来解释一下第一行代码,第一行代码是将字符串赋给一个字符指针,这个该怎么理解呢?实际上,在第一行代码中,编译器首先在内存中开辟一块存储区域来存储字符串中的每个字符,是以 'a',原创 2014-05-31 18:12:20 · 1340 阅读 · 0 评论 -
关于递归的一些简单想法
递归是我们在编程过程中用到的一种思想,当一个函数自身调用自身的时候,无论是直接或者间接地调用,都属于递归,下面对于什么时候用到递归以及怎么用递归,谈一点我个人初步的想法。什么时候用到递归当我们要解决的问题有着 重复执行的基本操作 的时候,可以考虑使用递归用递归思想进行编程的时候需主要需要注意的几点内容首先是 递归上限 ,通常是一个指出递归开始位置的 有效范围内 的对象,一般原创 2014-05-24 23:08:48 · 1497 阅读 · 0 评论 -
引用返回左值及其判断引用有效性的方法
被调函数的返回类型决定返回的是左值还是右值,当被调函数的返回类型是 引用 时,返回的是左值,其余情况下返回的是右值,被调函数返回的左值有着与其他左值类型同样的运算特性,需要特别指出的是, 我们能为返回类型是非常量引用的函数的结果赋值 ,但是需要注意的是,进行运算的前提是确保返回的引用是有效的, 返回与局部对象绑定的引用是无效的 ,因为被调函数运行结束时,局部对象的存储空间已经释放,返回与局部对象绑原创 2014-05-23 16:38:51 · 1927 阅读 · 0 评论 -
范围 for 语句与二维数组
我的主力博客:半亩方塘为了讲清楚我们要说明的问题,首先我们来定义一个二维数组:int ival[2][3] = { {1, 2, 3}, {4, 5, 6}}; 这是一个2行3列的二维数组,如果我们要使用范围 for 循环来输出这个二维数组中的元素的话,相应地代码如下:for (auto &row : ival) { for (auto原创 2014-05-21 12:20:00 · 4962 阅读 · 1 评论 -
令人纠结的两行代码
以下内容系原创,转载请务必注明地址主要参考资料:我在 Stackoverflow 上提的问题 Why the first is right but the second is wrong ?这令人纠结的两行代码如下:const char *cval = "nothing"; // 正确int *ival = {1, 2, 3, 4}; // 错误原创 2014-05-20 11:25:24 · 1381 阅读 · 3 评论 -
指向数组的指针与指向数组首元素的指针
我的主力博客:半亩方塘以下原创内容,转载请注明地址,欢迎对以下内容提供不同参考意见:指向数组的指针与指向数组首元素的指针究竟有什么区别呢?有人说,这二者不是一回事么?它们就是同一个东西啊!然而,事实并非如此,下面我细细道来。首先,我们定义一个一维数组来具体分析一下,这个数组含有10个整数:int ia[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8原创 2014-05-12 16:22:37 · 15103 阅读 · 0 评论 -
C++ 顶层 const
本文的主要参考来源来自于:C++ Primer 中文版(第 5 版) 第 57 面至第 58 面1. 顶层 const 与底层 const 概念我们知道,指针本身是一个对象,因为,指针实际对应着内存单元的一段存储空间,然而,指针所指向的也是一个数据对象,因此,指针是一个常量与指针所指向的是一个常量是两个完全不同的概念, 顶层 const 表示的是 指针本身是一个常量, 底层原创 2014-05-06 09:37:06 · 2752 阅读 · 2 评论 -
C++ 无符号类型的运算对象参与的类型转换
我的主力博客:半亩方塘当某个运算符的运算对象类型不一致,且其中某一个运算对象是无符号类型时,这个需要进行相应地类型转换,至于类型转换的结果,则 依赖于机器中各个整数类型的相对大小 。当某个运算符的运算对象类型不一致,且其中某一个运算对象是无符号类型时,分为以下几种情况:当 无符号类型 的运算对象 大于 有符号类型 的运算对象时,则将 有符号类型转换为相应的无符号原创 2014-05-04 15:29:02 · 1490 阅读 · 1 评论 -
C++ 中左值和右值的探讨
我的主力博客:半亩方塘对于 C++ 中的左值和右值,我们通常的说法是:当一个对象被用作右值的时候,用的是对象的值(内容);当对象被用作左值的时候,用的是对象的身份(在内存中的位置),这句话来自于 《C++ Primer 第五版》 第 121 页,那么,对于这句话,该作何理解呢?下面我想来谈谈我的看法:ISO C++03规定表达式必须是左值或右值之一,而在ISO C++11中,左原创 2014-04-27 14:56:08 · 1198 阅读 · 0 评论 -
C++ 中数组的指针和下标
我们知道,当我们使用数组名的时候实际上使用的是指向数组首元素的指针,实际上,使用数组名参加下标运算时本质上参加运算的仍然是指向数组首元素的指针:int arr[] = {3, 5, 2, 1, 4, 5, 6, 2};int i = arr[2]; // i 的值是 2arr[2] 实际的运算过程是这样的:*(arr + 2);其实,只要指针指向的是数组中的某一个原创 2014-04-19 21:51:46 · 7601 阅读 · 0 评论 -
C++ 中关于 iostream、源文件命名约定以及运行 GNU (微软)编译器的几点说明
1. 关于#include 在一个C++程序中,几乎都需要有这么一条语句#include ,以致于我们每写一个C++程序,都习惯性地先写下这条语句,再接着写程序的其他部分,由于写下这条语句是习惯性的动作,所以我估计很少有人真正花时间回想一下这究竟是什么东西?为什么在一个C++程序中要写这条语句?说来也很简单:在C++中,没有专门用来进行输入输出(IO)的语句,而是用标准库来提供IO原创 2014-02-11 21:43:14 · 1852 阅读 · 1 评论