![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
珠玑小技
文章平均质量分 72
肥萝卜使大力
这个作者很懒,什么都没留下…
展开
-
集合初始化需要注意的一个问题
集合就是多个事物聚集在一起的总体,集合包括数组、结构体、类对于内部类型数组,我们可以这样定义int a[5] = {1,2,3,4,5};int b[5] = {0};int c[] = {1,2,3,4,5};对于一个结构体,我们也可以使用{}初始方式,如下struct X{ int i; float f;};X x1 = {1,1.1};X原创 2011-11-17 22:09:36 · 897 阅读 · 0 评论 -
Linux文件与Windows文件的文件/文件名编码转换方法
文件编码转换1.在Vim中直接进行转换文件编码,比如将一个文件转换成utf-8格式:set fileencoding=utf-82. iconv 转换,iconv的命令格式如下:iconv -f encoding -t encoding inputfile比如将一个UTF-8 编码的文件转换成GBK编码iconv -f GBK -t UTF-8 file1 -o fil转载 2011-12-21 11:13:59 · 6785 阅读 · 0 评论 -
Linux与Windows关于标准输入中涉及EOF的处理方式
程序:#include void main(){ int c = getchar(); int i = 0; while (c != EOF) { putchar(c); c = getchar(); i++; } if (feof(stdin)) { printf(" End of file reached.%d", i); } else {原创 2011-12-13 17:10:39 · 3527 阅读 · 0 评论 -
详解C的异常处理机制(goto\setjmp longjmp)
来自希赛网,作者王胜祥。1 C语言中的异常处理机制 在这之前的所有文章中,都是阐述关于C++的异常处理机制。的确,在C++语言中,它提供的异常处理的模型是非常完善的,主人公阿愚因此才和“异常处理”结下了不解之缘,才有了这一系列文章的基本素材,同时主人公阿愚在自己的编程开发过程中,也才更离不开她,喜欢并依赖于她。 另外,C++语言中完善的异常处理的模型,也更激发了主人公转载 2011-11-26 12:43:27 · 4571 阅读 · 0 评论 -
警惕“delete void*”
对一个void*类型指针进行delete操作会出错,除非指针所指的内容是简单类型内容,因为这个操作只会释放内存,而不会执行析构函数下面是一个代码示例://:BadVoidPointerDeletion.cpp#include using namespace std;class Object{ void* data; // Some storage const int si原创 2011-11-22 20:53:26 · 7560 阅读 · 2 评论 -
利用C++重载实现类似“类成员指针”的功能
代码如下://: PointerToMemberOperator.cpp#include using namespace std;class Dog{public: int run(int i) const { cout << "run\n"; return i; } int eat(int i) const { cout << "eat\n";原创 2011-11-21 22:09:18 · 921 阅读 · 0 评论 -
应用C++成员指针需要遵守的两个规则
规则1:*需要与间接引用的对象结合,因为类内部是没有地址的,所以成员指针只是代表对象内一定的偏移规则2: 当获取成员函数的地址(偏移地址)时,符号&是必要的,这与非成员函数指针的用法不同用例1://: PointerToMemberData.cpp#include using namespace std;class Data{public: int a, b,原创 2011-11-21 21:04:53 · 717 阅读 · 0 评论 -
C++中的静态对象需要注意的几个问题
1.无论何时设计一个包含静态变量的函数,都需要注意多线程问题2.静态对象(包括局部静态对象和全局静态对象)的析构函数在程序从main中退出,或者是标准的C库函数exit被调用时才调用。多数情况下main函数的结尾也是调用exit来结束程序的,这就意味着在析构函数内部使用exit函数是很危险的,因为这样会导致无穷的的递归调用。但如果用标准的C库函数abort来退出程序,静态对象的析构函数原创 2011-11-19 20:39:06 · 4396 阅读 · 0 评论 -
详解静态初始化的相依性问题
在一个指定的翻译单元中,静态对象的初始化顺序严格按照对象在该单元中定义出现的顺序,而清除的顺序与初始化的顺序正好相反但我们要注意的是,对于作用域为多个翻译单元的静态对象来说,不能保证严格的初始化顺序。这可能会引发一些问题,下面是一个能引起“灾难”的例子//First file#include std::ofstream out("out.txt");//Second fil原创 2011-11-20 22:40:18 · 1241 阅读 · 0 评论 -
详解预处理器宏的几个特征及其应用
“#”指示:允许使用一个标识符并把它转化为字符数组应用实例1:#include using namespace std;#define DEBUG(x) cout << #x"=" << x << endl;int main(){ int a = 1; DEBUG(9); DEBUG(a+1);} 运行结果:9=9a+1=2应用实例2,实现跟踪一条语句的原创 2011-11-19 19:47:52 · 956 阅读 · 0 评论 -
妙用union和enum实现只有一个数据成员的类可存储不同的类型
直接上代码:// From Thinking in C++, 2nd Edition// Available at http://www.BruceEckel.com// (c) Bruce Eckel 1999// Copyright notice in Copyright.txt// A super-variable#include using namespace std;原创 2011-11-18 22:03:18 · 1458 阅读 · 0 评论 -
详解按位const与按逻辑const
如果想建立一个const成员函数,但是还想在对象中改变某些数据,这时候该怎么办呢?这种情况涉及到按位const与按逻辑const按位const是指对象中的每个字节都应该是固定的,按逻辑const是指对象从概念上讲是不变的,但是可以以成员为单位进行改变当某个对象是const对象时,就指定了应该按位const,但我们可以用某种方法使之改变成按逻辑const方法一被称为“强制转换常量原创 2011-11-18 22:23:48 · 1058 阅读 · 0 评论 -
一个计时器的实现
直接上代码定义头文件://: C09:Cpptime.h// From Thinking in C++, 2nd Edition// Available at http://www.BruceEckel.com// (c) Bruce Eckel 2000// Copyright notice in Copyright.txt// A simple time class#ifn原创 2011-11-18 22:37:14 · 668 阅读 · 0 评论 -
详解警告“unreferenced local variable”
在编译C++程序时,我们有时候遇到这样的警告warning C4101: 'x1' : unreferenced local variable下面是一个会出现上述警告的简单例子:using namespace std;class X{};int main(){ int i; cin >> i; if(i) { X a; } return 1;}接下来是原创 2011-11-17 21:26:43 · 44530 阅读 · 1 评论 -
C++针对一个类的子类进行特化
copy自http://www.cppblog.com/qingant/archive/2012/03/21/168529.html在水木C++版,有人提出如何针对"基类是xx类的类型"进行特化。这里面的关键 是理解这样几件事情: 1. 模板的特化 2. 如何在编译期判断xx是xx的基类 我们使用了这样一个type traits:转载 2012-03-22 09:56:05 · 904 阅读 · 0 评论