- 博客(20)
- 资源 (9)
- 问答 (41)
- 收藏
- 关注
原创 C++ 抛出异常与传递参数的区别
代码便已运行环境:VS2012+Debug+Win321.C++异常处理基本格式C++的异常处理机制有3部分组成:try(检查),throw(抛出),catch(捕获)。把需要检查的语句放在try模块中,检查语句发生错误,throw抛出异常,发出错误信息,由catch来捕获异常信息,并加以处理。一般throw抛出的异常要和catch所捕获的异常类型所匹配。异常处理的一般格式为: try {
2015-11-29 13:26:51 3297
原创 C++ 为什么引入异常处理机制
另一方面,库的用户知道怎样处理这些错误,但却无法检查它们何时发生(如果能检测,就可以在用户的代码里处理了,不用留给库去发现)。setjmp()函数可在程序中存储一典型的正常状态,如果程序发生错误,longjmp()可恢复setjmp()函数的设定状态,从而实现goto语句无法实现的“长跳转”。(2)以后调用longjmp(j,r)的效果就是一个非局部的goto跳转或“长跳转”,程序将跳转到由j描述的上下文处(也就是到那原来设置j的setjmp()处)。取而代之的是那些传统的 C 的异常处理方法。
2015-11-28 20:57:58 3455
原创 OpenMP 加速字典字符集的笛卡尔乘积
1.字典字符集的笛卡尔乘积问题描述: 对于给定的由字典字符集组合而成的表达式,求该表达式构成的所有元素。例如表达式[0-9][a-z],其中0-9表示10个数字,a-z表示26个小写字母,构成的所有元素就是0a,0b,…,0z,1a,1b,…9z。字典字符集的笛卡尔乘积示意如下:问题分析: 对于任意的一个字典字符集构成的表达式[dic0][dic1]...[dicn],从左至右可以看作按照高位到......
2015-11-28 14:35:56 2318
原创 C++ 多字节与宽字符串的相互转换
代码编译运行环境:VC++2012+Debug+Win321.问题描述char字符与wchar_t字符由于编码不同,所以在char*和wchar_t*之间使用强制类型转换达不到正确转换字符串的目的。考察如下程序。#include <iostream>using namespace std;int main(){ wchar_t* str=
2015-11-28 11:46:41 17579 5
原创 C 语言的数据类型宽度扩展
代码编译运行环境:VC++ 2012+Debug+Win321.问题描述在编程或者面试过程中,会遇到如下问题:char c=128;printf("%d",c); //输出-128为什么一个正整数128以整型int输出却变成了一个负数?2.问题分析在理解上面的问题时,我们需要先了解如下问题。(1)char型所能表示的数据范围是-128~127。当把128赋值给char型变量时,那么内存中实际存储的
2015-11-27 18:01:00 5295
原创 C++ endl 的本质
除了利用系统预定义的操纵符来进行IO格式的控制外,用户还可以自定义操纵符来合并程序中频繁使用的IO读写操作。定义形式如下:ostream &操纵符名(ostream &s) {// 自定义代码return s;istream &操纵符名(istream &s) {// 自定义代码return s;// 编号格式如:0000001return s;// 要求输入的数为十六进制数return s;int a;std::cout
2015-11-22 21:31:16 21307 9
原创 C++ IO 流简介
1.输入输出(IO)与流的概念输入输出(IO)是指计算机同任何外部设备之间的数据传递。常见的输入输出设备有文件、键盘、打印机、屏幕等。数据可以按记录(或称数据块)的方式传递,也可以 流的方式传递。所谓记录,是指有着内部结构的数据块。记录内部除了有需要处理的实际数据之外,还可能包含附加信息,这些附加信息通常是对本记录数据的描述。流是一种抽象概念,它代表了数据的无结构化传递。按照流的方式进行输入输出,数
2015-11-22 13:50:46 2264
原创 C++ 解引用操作符重载
“*”是一个一元操作符,它作用于指针,表示去除指针所指单元的内容。当某个类中对*操作符今次那个重载时,是将该类的对象当做一个指针看待,而用*操作符提取指针所指向的内容。考察如下程序。#include <iostream>using namespace std;template<typename T> class DataContainer{ T *p;public: DataCo
2015-11-22 00:54:24 8091
原创 C++赋值操作符重载
1.赋值操作符重载的原因赋值操作符是一个使用频率最高的操作之一,通常情况下它的意义十分明确,就是将两个同类型的变量的值从一端(右端)传到另一端(左端)。但在以下两种情况下,需要对赋值操作符进行重载。 一是赋值号两边的表达式类型不一样,且无法进行类型转换。 二是需要进行深拷贝。2. 赋值操作符重载的注意事项赋值操作符只能通过类的成员函数的形式重载。这就说明了,如果要将用户自定义类型的值传递给基本数
2015-11-21 18:32:57 1954
原创 C++输入输出操作符重载
1. 输入输出操作符简介C++中输入操作符是>>,输出操作符是<<,又叫做流对象的“插入操作符”和“提取操作符“。其实这两个操作符最初是在C语言中用于整数的移位运算,到了C++中才利用操作符重载的技术将它们应用于输入、输出操作。2.重载的原因应用于基本类型的输入、输出操作都已经在C++标准库中定义好,没有必要重新定义,也不允许重新定义。而对于用户自定义类来说,如果想利用输入、输出操作符进行本类对象的
2015-11-18 09:35:23 3639
原创 C++ 动态联编实现原理分析
代码编译运行环境:VS2012+Debug+Win32所谓动态联编,是指被调函数入口地址是在运行时、而不是在编译时决定的。C++语言利用动态联编来完成虚函数调用。C++标准并没有规定如何实现动态联编,但大多数的C++编译器都是通过虚指针(vptr)和虚函数表(vtable)来实现动态联编。 基本的思路是: (1)为每一个包含虚函数的类建立一个虚函数表,虚函数表的每一个表项存放的是个虚函数在内存中
2015-11-17 19:25:46 4579 4
原创 C++ 构造函数与析构函数调用虚函数的注意事项
虽然可以对虚函数进行实调用,但程序员编写虚函数的本意应该是实现动态联编。在构造函数中调用虚函数,函数的入口地址是在编译时静态确定的,并未实现虚调用。但是为什么在构造函数中调用虚函数,实际上没有发生动态联编呢?第一个原因,在概念上,构造函数的工作是为对象进行初始化。在构造函数完成之前,被构造的对象被认为“未完全生成”。当创建某个派生类的对象时,如果在它的基类的构造函数中调用虚函数,那么此时派生类的构造函数并未执行,所调用的函数可能操作还没有被初始化的成员,将导致灾难的发生。
2015-11-16 21:25:08 9727
原创 C++ 虚调用及其调用的具体形式
1.虚调用的定义虚调用是相对于实调用而言,它的本质是动态联编。在发生函数调用的时候,如果函数的入口地址是在编译阶段静态确定的,就是是实调用。反之,如果函数的入口地址要在运行时通过查询虚函数表的方式获得,就是虚调用。2.虚函数的几种实调用的情形2.1不通过指着或者引用调用虚函数虚调用不能简单的理解成“对虚函数的调用”,因为对虚函数的调用很有可能是是调用。考察如下程序。#include &lt;iostrea
2015-11-16 19:49:36 3576
原创 C++ RTTI 简介
代码编译运行平台:VS2012+Debug+Win32RTTI是Runtime Type Identification的缩写,是“运行时类型识别”的意思。面向对象的编程语言,象C++,Java,Delphi都提供了对RTTI的支持。 本文将简略介绍 RTTI 的一些背景知识、描述 RTTI 的概念,并通过具体例子和代码介绍什么时候使用以及如何使用 RTTI。本文还将详细描述两个重要的 RTTI 运算
2015-11-14 03:14:47 2326
原创 C++ 虚拟继承与虚基类
1.多重继承带来的问题C++虚拟继承一般发生在多重继承的情况下。C++允许一个类有多个父类,这样就形成多重继承。多重继承使得派生类与基类的关系变得更为复杂,其中一个容易出现问题是某个基类沿着不同的路径被派生类继承(即形成所谓“菱形继承”),从而导致一个派生类对象中存在同一个基类对象的多个拷贝。 多重继承带来同一个基类对象在派生类对象中存在多个拷贝的问题,考察如下代码。#include <iostr
2015-11-13 22:58:35 2077
原创 C++ 函数重载、隐藏与覆盖的区别
C++ 规定在同一作用域中,同名函数的形式参数(指参数的个数、类型或者顺序)不同时,构成函数重载。函数隐藏指不同作用域中定义的同名函数构成函数隐藏(不要求函数返回值和函数参数类型相同)。比如派生类成员函数屏蔽与其同名的基类成员函数、类成员函数屏蔽全局外部函数。请注意,如果在派生类中存在与基类虚函数同返回值、同名且同形参的函数,则构成函数重写。重定义派生类中与基类同返回类型、同名和同参数的虚函数,构成虚函数覆盖,也叫虚函数重写。
2015-11-12 23:48:20 3179 1
原创 C/C++ sizeof(下)
sizeof作用于基本数据类型,在特定的平台和特定的编译中,结果是确定的,如果使用sizeof计算构造类型:结构体、联合体和类的大小时,情况稍微复杂一下。
2015-11-10 22:08:55 2485 1
原创 C++ 数组与指针详解之终极无惑
指针是用来存放地址值的变量,相应的数据类型成为指针类型。在32位平台上,任何指针类型所占用的空间都是都是4字节。比如sizeof(int*)、sizeof(double*)、sizeof(float*)等的值都为4。type* p,其中type是指针所指向对象的数据类型,而*则是指针的标志,p是指针变量的名字。由于C++中允许定义复合数据类型,因此指向复合数据类型对象的指针的定义方式可能较为复杂。理解指针,关键是理解指针的类型和指针所指向数据的类型。
2015-11-10 21:13:59 2930
原创 C++ 基类私有成员会被继承吗
1.派生类间接访问继承私有成员在类的继承中,类的私有成员在派生类中是“不可见“的,这种”不可见“是指在派生类的成员函数中,或者通过派生类的对象(指针,引用)不能直接访问它们。但是,不能直接访问并不代表不能访问。在派生类还是能够通过调用基类的共有函数的方式来间接地访问基类的私有成员,包括私有成员变量和私有成员函数。考察如下程序。#include <iostream>using namespace s
2015-11-05 00:51:24 23105 6
原创 C++ 内存池介绍与经典内存池的实现
内存池(Memory Pool)是一种内存分配方式。通常我们习惯直接使用new、malloc等API申请内存,这样做的缺点在于所申请内存块的大小不定,当频繁使用时会造成大量的内存碎片并进而降低性能。
2015-11-01 00:04:38 41819 27
tinyxml2+示例代码+介绍文档
2015-09-26
HTML 如何设置图片宽高分别为原宽高的不同比例?
2020-08-22
Google C++编程风格指南中6.10节流中不支持字符串操作符重新排序 什么意思
2018-08-05
C++模板元编程和编写模板有什么区别?
2018-06-17
g++ -S将源码编译成汇编代码,使用的是哪个工具?
2018-06-11
从长度为n的数组中找出同时满足下面两个条件的所有元素,时间复杂度为O(n)。
2018-05-28
为什么C++局部数组变量地址间隔是16字节的倍数?
2018-05-17
缓冲溢出,为什么不报错?
2018-05-16
RLF、HRLF控制字符到底是什么
2018-05-10
printf关于浮点数的四舍五入的奇怪问题?
2018-05-09
stringstream的输入与输出的用法
2018-03-19
使用JS如何获取剪贴板内容
2018-03-06
Linux命名管道为什么叫FIFO?
2018-02-07
Linux下printf与wprintf不能同时使用?
2018-01-15
C标准库函数setvbuf的名称全称
2018-01-15
mysql count distinct 加条件
2017-06-15
awk如何获取除最后一行的所有行?
2017-05-19
rz命令如何上传文件夹
2017-05-07
CSS浮动为什么不会遮盖同级元素
2015-09-17
Linux下系统调用execl会等待一段时间才执行指定的可执行程序?
2015-09-11
为什么 Go range slice 时通过下标和值拷贝的性能是一样的?
2022-03-17
反向代理的上游服务指的是什么?
2021-03-12
Golang 接口类型可以有数据成员吗
2020-12-02
GoLand 如何自动批量换行
2020-10-07
Golang 如何进行标准错误输出
2019-12-24
git branch -dr origin/<branchname> 无法删除远端分支
2019-09-16
golang main包可以被import吗
2019-06-11
golang小数默认是float32还是float64?
2019-05-28
golang const 可以修饰函数形参吗
2019-05-28
ldconfig命令全称是什么呢?
2019-04-02
golang的struc成员后跟字符串有什么作用?
2019-03-15
Linux中 链接器 ld 命令的全称是什么英文单词?
2019-03-12
ssh命令默认端口如何查看
2019-02-15
ssh客户端为什么不指定端口也可以登录成功
2019-02-15
C/C++的预处理文件的后缀为什么约定为.i
2019-01-24
go为什么不能获取字符串某个字符地址?
2019-01-13
date命令将时间戳转为可读时间为什么需要加@符号
2018-12-06
GNU C++定义对象时对象名称被括号包围且前面有个下划线是什么意思
2018-10-09
git merge可以操作远端分支吗?
2018-08-16
TA创建的收藏夹 TA关注的收藏夹
TA关注的人