C++语言
freshgamer
这个作者很懒,什么都没留下…
展开
-
C++ ODR
单定义规则(ODR,One Definition Rule):C++ 标准规定每个程序应该只包含那个程序中用到的每个非内联函数或对象的一个定义,但是在同一个程序中,一个类、枚举类型、具有内部链接的内联函数和和一个模板可能有不止一个定义,因此只要保证每个定义至出现在一个独立的翻译单元(TU)即可。简言之:同一翻译单元不能出现多个相同的定义(不能出现重复定义、歧义。)。定义的同等性:在不同的翻译单转载 2010-04-28 18:55:00 · 901 阅读 · 0 评论 -
C++中static和extern的微妙细节
static和extern在C和C++中可以用来既可以修饰数据(变量和常量),还可以修饰函数。 如果用来修饰变量常量数据标识符,则static和extern的时间特性(存储特性)相同的,都是静态存储,存储在全局数据区,但是static是在定义时生成,而extern则是在程序执行前已经创建(早于main()函数执行),一直到程序结束销毁,但是static要早于extern,所以MFC原创 2010-05-06 18:40:00 · 2096 阅读 · 0 评论 -
C++类对象存储空间备忘录
详细的参看《C++对象模型》C++98标准规定的类存储空间如下:1.出于执行效率的考虑,所有的成员函数都在编译时期转换为普通函数,所以不占运行期类内存空间;2.非静态成员,根据数据类型分配相应空间,顺序不确定,目前大部分编译器都按声明顺序分配; 静态成员,在全局数据区,不占类存储空间。3.存在虚函数的,由于虚函数是运行期绑定,必须分配运行期内存空间,原创 2010-05-09 22:53:00 · 889 阅读 · 0 评论 -
传数组名的小问题
有人问到传数组名,和数组名引用的问题,平时没怎么使用这么怪异的语法没有想明白;后来在水木清华上咨询到了清晰的解答,现深入总结如下:例子:#include #include using namespace std;void fArray(int *a, int b[], int (*c)[4], int (&ra)[4], int d[4]){ cout原创 2010-06-06 06:08:00 · 314 阅读 · 0 评论 -
编程的首要原则
KISS - Keep It Simple Stupid(简化,UNIX设计理念) DRY - Don't Repeat Yourself (复用)ABSTRACT(抽象)写代码时时刻设想你就是将来要来维护这坨代码的人.先弄清你的问题是什么!代码只是工具,不是手段。知道什么时候不该编码。永远不要假定你已经了解一切了!不作没有证据的推论。如果方案在你脑子里面或者纸上不能工作,写成代码还是不能工作。越懒越好。过早优化是一切罪恶的根源。不要重新发明轮子。测试通过前说什么“它可以工作”都是纯扯淡。了解你的工具。转载 2010-06-07 18:13:00 · 256 阅读 · 0 评论 -
解读复杂指针声明
C/C++语言所有复杂的指针声明,都是由各种声明嵌套构成的。如何解读复杂指针声明呢?右左法则是一个既著名又常用的方法。不过,右左法则其实并不是C标准里面 的内容,它是从C标准的声明规定中归纳出来的方法。C标准的声明规则,是用来解决如何创建声明的,而右左法则是用来解决如何辩识一个声明的,两者可以说是 相反的。右左法则的英文原文是这样说的: The right-left rule: Start reading the declaration from the innermost parent转载 2010-06-11 20:35:00 · 482 阅读 · 0 评论 -
C++中关于类型的一些术语
CV-qualifiers有三种:const-qualifier(const限定符)、volatile-qualifier(volatile限定符)、以及const-volatile-qualifier(const-volatile限定符)。 用CV-qulifiers限定和未被CV-qulifiers限定的类型是不同的类型,但它们有相同的表示和对齐方式。 const类对象的非静态、非mutable、以及非引用数据成员是const-q转载 2010-06-24 17:27:00 · 362 阅读 · 0 评论