C++
文章平均质量分 75
tonywearme
暂无
展开
-
在switch-case中定义变量时当心被“穿越”
这篇文章的分类是C++,所以特此声明这里提到的规则只适用于C++。对于C语言,是有不同的一套规则的。先来看看下面这段代码,有问题吗?void RunStateMachine(){ switch(m_status) { case TASK_START: int data = FormDataToSend(); m_mail原创 2011-12-16 01:00:12 · 12453 阅读 · 19 评论 -
细数Python与C++的区别(更新中……)
Python与C/C++有不少区别,其中一些很容易疏忽,导致程序出错。这里列了一些,供大家参考。持续更新中……Python没有自增自减运算符(++i、i++、--i、i--)C/C++的一个常见循环是:for (int i = 0; i < 10; ++i) std::cout 而Python对应的循环为:for i in range(10): print (i)也许原创 2015-08-18 13:19:01 · 7167 阅读 · 0 评论 -
从一个实例来认识GDB与高效调试
GDB的全称是GNU project debugger,是类Unix系统上一个十分强大的调试器。这里通过一个简单的例子(插入算法)来介绍如何使用gdb进行调试,特别是如何通过中断来高效地找出死循环;我们还可以看到,在修正了程序错误并重新编译后,我们仍然可以通过原先的GDB session进行调试(而不需要重开一个GDB),这避免了一些重复的设置工作;同时,在某些受限环境中(比如某些实时或嵌入式系统原创 2014-11-24 21:31:49 · 13583 阅读 · 5 评论 -
static关键字对对象存储期和链接期的影响
在看这篇文章之前,先问自己一个问题:加上static关键字后的名字可能拥有外部链接期吗?如果你已经很确定地知道答案,并且和这篇文章的最后结论相同,那么恭喜你,不用看这篇文章了,因为我将要讲的你都知道了。影响对象的存储期存储期,又称storage duration,是指变量所占用内存空间的生命期。也就是说,它决定了在整个程序的执行过程中该空间必须存在的时间段。它大于等于对象的生命期。C++0原创 2012-10-31 15:18:45 · 1640 阅读 · 5 评论 -
Incomplete type与Foreward declaration
有时我们在编程时会遇到一些与类型不完整有关的编译器报错,此时我们往往只是简单的把它改成相应的完整类型定义,也没空去想为什么会报错,还有没有其他更好的解决方法;还有,很多人会一上来不管三七二十一把所有可以包含的头文件都包含一遍,确保编译通过。而很多时候,使用一个自定义类型,是不需要包含它的头文件的。所以,今天写篇文章来对这些做个总结。Incomplete Type不完整类型,包括那些类型原创 2012-11-01 16:19:43 · 4045 阅读 · 3 评论 -
揭开私有继承的面纱
什么是私有继承?以前在学校学习的时候,冥冥乎知道有这样一个东西,却没有仔细研究过。后来工作中用到Boost库才开始了解它。如果说保护继承大多是为了语言完整性的话,私有继承还是有一些用途的。私有继承 vs 公有继承公有继承继承的是接口与实现,它表示了类与类之间is-a的关系。而私有继承继承的仅仅是实现,它表示了has-a (或者 is-implemented-in-terms-of)原创 2011-12-05 00:54:00 · 5640 阅读 · 18 评论 -
inline函数必须在头文件中定义吗?
前不久在写代码的时候遇到一个link错误,代码的原型如下所示,基本就是定义了一个基类和派生类,在派生类的一个成员函数中用到了基类定义的一个内联函数。// base.hclass Base{protected: void fun();};// base.cpp#include "base.h"inline void Base::fun(){}// derive原创 2011-12-23 13:09:26 · 16331 阅读 · 3 评论 -
避免在派生类中重新定义基类的非虚函数
我们都知道,在基类中定义虚函数的目的是允许派生类拥有相同接口却可以有不同的实现,通过对象的指针或引用来访问虚函数可以实现运行时的多态。这么说来,在派生类中重定义(override)虚函数是没有任何问题的。那么,可以重定义基类中的非虚函数吗?答案是:技术上你可以这样做(至少编译器不会报错),但是绝大多数情况下不应该做。class Base{public: void f() {原创 2011-12-01 21:02:58 · 4786 阅读 · 0 评论 -
C++名字隐藏对公有继承的影响
在讨论名字隐藏对公有继承的影响前,让我们先来看看什么是名字隐藏,以及它在非继承结构中的影响。C++中的名字隐藏(Name Hiding)规则简单地理解就是:当一个具有小作用域(inner scope)的对象A和一个作用域包含A(outer scope)的对象B同名时,在A的作用域中,B将不可见。也就是说B完全被A所屏蔽。double i = 3.1415;namespace XY{原创 2011-11-18 14:13:54 · 3283 阅读 · 5 评论 -
纯虚函数的默认实现
在帮新同事进行代码审查的时候,常常会发现这样的问题:代码中原有基类B和派生类D1,现在新加一个派生类D2,它有一个函数f2()。由于经验不足,新同事并没有注意到D1也有类似的函数f1()。于是造成了类似的代码出现在了两个地方,代码冗余造成将来的维护工作异常困难。注意到f()实际上是一个通用的行为,我们可以把它抽出来放到基类中,如下所示。class B{public: virtual原创 2011-11-16 22:40:36 · 12048 阅读 · 8 评论 -
从信息隐藏的一个需求看C++接口与实现的分离
让我们从stackoverflow上一个同学的问题来开始。问题的原型是这样的(原问题见:class member privacy and headers in C++):Portaljacker:“有一个类A, 有一些共有成员函数和私有数据,如下所示。”class A{public: X getX(); Y getY(); Z getZ(); ..private原创 2011-11-02 00:07:21 · 6492 阅读 · 9 评论 -
[Leetcode 4] Median of Two Sorted Arrays
如何求两个数组的中位数,包括长度相同、不相同两种情况。原创 2016-07-31 22:52:07 · 667 阅读 · 0 评论