
C++
文章平均质量分 89
oowgsoo
这个作者很懒,什么都没留下…
展开
-
C++11~20 常量表达式
C++98时代C++98编译器对int常量情有独钟,因为这是少数它能直接识别的东西。因为这个有限的能力,编译器就能够预先判定数组的大小了: TEST_METHOD(TestConstVar) { //int n = 3; const int n = 3; int a[n] = { 0 }; Assert::AreEqual(size_t(3), _countof(a)); const int m = n * 3; int b[m] = { 0 };...原创 2021-10-28 13:12:46 · 505 阅读 · 0 评论 -
C++20 三向比较
老兵作为一名在战场上出生入死多年的老兵,对于手中的武器C++,我有充分的理由相信自己已经对她身上的每一寸肌肤都了如指掌,直到有一天,我被下面的代码吓了一跳: struct Num { int a; long b; Num(int a_ = 0, long b_ = 0) :a(a_), b(b_) { } auto operator <=> (const Num&) const = default; };这是个...原创 2021-10-20 13:26:55 · 404 阅读 · 0 评论 -
C++的枚举类型
C的时代枚举类型在代码中直接写出来的常量,我们称之为“魔数”。例如:int week = 1;你说这个week是星期一,也有人说这个week应该是星期日。这玩意太容易引起歧义,让人摸不着头脑,如同莫名其妙的魔术,所以我们称之为“魔数”。问题的关键是我们应该给这个常量一个确切的名字:int monday = 1;这看起来好多了,不会引起歧义了,于是你愉快地继续写道:int monday = 1;int tuesday = 2;int wednesday = 3;..原创 2021-10-18 16:48:19 · 477 阅读 · 0 评论 -
C++中的临时变量
C++的临时变量 它们是被神所遗弃的孩子,没有人见过它们,更没有人知道它们的名字.它们命中注定徘徊于命运边缘高耸的悬崖和幽深的深渊之间,用自己短暂的生命抚平了生与死之间的缝隙.譬如朝露,却与阳光无缘.是该为它们立一座丰碑的时候了,墓铭志上写着:我来了,我走了,我快乐过. 许多人对临时变量的理解仅仅限于: string temp; 其实,从C++的观点来看,这根本就不是临时变量,而是局部变量.原创 2007-04-29 23:06:00 · 1854 阅读 · 0 评论 -
C++中的const
关键字const是单词"constant"的简写,它的语意就是"保持不变,不允许修改".const在C++的代码中是大量存在的,个人认为,const是C++中提供的最优美的机制首先它足够的简单:对程序员来说,语意简单,就是保持不变,很少会有歧异对计算机来说,实现简单,只需要编译器报告那些改变了const的例外情况其次它足够的高效:对程序员来说,它为程序员提供了一个非常常用的契约,减少了错误发生原创 2007-04-29 23:05:00 · 1352 阅读 · 3 评论 -
位运算
位运算是计算机最擅长的计算方式,尽管从广义上说,位运算仅仅是布尔代数中的一小部分,但是现实中,两者却不能画等号,根本的原因是计算机中的位运算是多位的,而且是逻辑运算和算术运算混合的,而常规的布尔代数只研究真值和假值的逻辑运算长期以来,数学专家对位运算是不屑一顾的,认为已经没有什么可研究的了,只有少数的计算机专家才对这个问题无比的着迷,因为这就是计算机的思考方式.这里说的少数确实是相当的少,在我的印原创 2007-04-16 19:01:00 · 1758 阅读 · 0 评论 -
C++中的Aggregate
先看一行代码: int x[] = {1, 3, 5};这里声明x为有3个int元素的数组,在C语言中存在大量这样的代码,这太司空见惯了,似乎没有什么可好奇的东西存在,那么在C++中呢?嗯,C++必须兼容C语言中的这种小把戏,说得再直白些:C++中为了兼容C,对某些特殊的数据类型存在一种特殊的初始化方式,那就是直接用{}来初始化,而这种特殊的数据类型就称之为Aggregate(有人翻译为聚合体,见原创 2007-03-22 13:16:00 · 3883 阅读 · 1 评论 -
C++中的reference
基础知识:引用和指针看起来很不一样(包括定义,赋值和使用),但是从本质上说它们又是类似的,无论是指针还是引用都可以间接的指向一个变量,也可以说,指针和引用引入和一个间接层.在C++中,只有指针和引用才能够支持多态,这并不是偶然的.让我们首先看看引用的语法,不需要一上来就是一堆标准引用,只需要一小段精心设计的代码就可以了 int m = 10; int n = 20; int *p = NUL原创 2007-03-21 07:21:00 · 2415 阅读 · 0 评论 -
指向类成员函数的指针并非指针
参考>的相关章节"指向类成员函数的指针",这个术语中包含了"类成员函数"的术语,但是严格的说,这里的成员函数只是指非静态成员函数,这个术语中还包含了"指针"这个术语,但是严格的说,它即不包含地址,行为也不象指针,说得干脆点,那就是"指向类成员函数的指针"并非指针.尽管这个术语有很大的迷惑性,但是就其含义来说,可以把一组同类型的函数抽象为一个"指向函数的指针",同样的道理,可以把一组类中同类型的类成原创 2007-03-19 15:59:00 · 2432 阅读 · 2 评论 -
指向类成员变量的指针并非指针
参考>的相关章节"指向类成员变量的指针",这个术语中包含了"类成员变量"的术语,但是严格的说,这里的成员变量只是指非静态成员变量,这个术语中还包含了"指针"这个术语,但是严格的说,它即不包含地址,行为也不象指针,说得干脆点,那就是"指向类成员变量的指针"并非指针.尽管这个术语有很大的迷惑性,但是就其含义来说,可以把一组同类型的变量抽象为一个"指向变量的指针",同样的道理,可以把一组类中同类型的类成原创 2007-03-19 15:58:00 · 6098 阅读 · 0 评论