5.2 数组
5.2.2 字符串文字量
类似”this is a string.”这样一个字符串文字量,它是一个常量。正如代码中一个显式的数字0xff08一样,其值不可以被更改。如想修改,可以通过复制给一个变量来实现:
int a = 0 ...
4.8 枚举
枚举是表示具有共同属性的整型常量集合的用户自定义类型。这其中包含这些含义:
1. 枚举的取值只能是整数,正负皆可;
2. 枚举的取值是常量,枚举初始化后,这些值不能被改变;
3.   ...
编译器是如何针对虚函数产生可以再运行时刻确定被调用函数的代码呢?也就是说,虚函数实际上是如何被编译器处理的呢?Lippman在深度探索C++对象模型中的不同章节讲到了几种方式,这里把“标准的”方式简单介绍一下。
我所说的“标准”方式,也就是所谓的“VTABLE”机制。编译器发现一个类中有被声明为virtual的函数,就会为其搞一个虚函数表,也就是VTABLE。VTABLE实际上是一个函数指针的数组,每个虚函数占用这个数组的一个slo ...
现有一基础模块A,提供模块间通信服务。类B、C中都有一个私有A*成员用于与其他模块之间通信,B、C的构造函数要求提供一个A的指针来初始化该私有成员。使用B的开发人员在平台W1上开发程序P1,具有A的A1实现版本;使用C的开发人员在平台W2上开发程序P2,具有A的A2实现版本;P1,P2进行通信。现在来看看A的界面如何使用:
对于A的设计者,给出A的界面接口规范A.h向所有驱动厂商、用户提供;并且给出了W1平台的实现A1.h,A1.cpp,其中A1中有派生类A1 : public A,并在A1.cpp中给出了全部接口实现;编译出A1库,并且向客户提供头文件A1.h;
类B为使用A,在 ...
Bash Shell可以进行变量的条件替换,既只有某种条件发生时才进行替换,替换
条件放在{}中.
(1) ${value:-word}
当变量未定义或者值为空时,返回值为word的内容,否则返回变量的值.
(2) ${value:=word}
与前者类似,只是若变量未定义或者值为空时,在返回word的值的同时将
word赋值给value
(3) ${value:?message}
若变量以赋值的话,正常替换.否则将消息message送到标准错误输出(若
此替换出现在Shell程序中,那么该程序将终止运行)
(4) ${value:+word}
若变量以赋值的话,其值 ...
by Christopher Diggins
November 11, 2005
Summary
Ostream iterators are a handy but under-utilized tool for using the STL to output containers and ranges. Here I provide an alternative, which has a more pleasing syntax.
An ostream iterator, allows you to ...
可以。不过你得悠着点。当你这样做时,也许你自己都不知道自己在干什么!在构造函数中,虚拟机制尚未发生作用,因为此时overriding尚未发生。万丈高楼平地起,总得先打地基吧?对象的建立也是这样——先把基类构造完毕,然后在此基础上构造派生类。
看看这个例子:
#include<string> #include<iostream> using namespace std; class B { public: B(const string& ss) { cout << "B constructor\ ...
类似这样的问题千奇百怪。例如:
为什么我明明不想复制对象,而编译器却偏偏这么做了呢?
如何关闭复制机制?
如何防止隐式转换?
为何 int 自动转换成了复数?
类的默认复制构造函数和赋值运算符可以复制所有元素。例如:
struct Point {
&nbs ...
如果你想得到一个可用于常量表达式中的常量,例如数组大小的定义,那么你有两种选择:
class X { static const int c1 = 7; enum { c2 = 19 }; char v1[c1]; char v2[c2]; // ... };
一眼望去,c1的定义似乎更加直截了当,但别忘了只有static const的整型或枚举型量才能如此初始化。这就很有局限性,例如:
class Y { const int c3 = 7; // error: not static static int c4 = 7; // error: not const s ...
为了确保两个不同对象的地址不同,必须如此。也正因为如此,new返回的指针总是指向不同的单个对象。我们还是来看代码吧:
class Empty { }; void f() { Empty a, b; if (&a == &b) cout << "impossible: report error to compiler supplier"; Empty* p1 = new Empty; Empty* p2 = new Empty; if (p1 == p2) cout << "impossible: report ...
- 浏览: 8935 次
- 性别:

- 来自: 上海

- 详细资料
搜索本博客
最近加入圈子
最新评论
-
站在巨人肩上的思考[连载 ...
呵呵,我看的是Effective C++第三版,第一个item。 对,就是那四句 ...
-- by shi5jin -
站在巨人肩上的思考[连载 ...
欢迎讨论远程数据库和rpc的编程。 “《Effective C++》的开篇点题 ...
-- by bigpanda -
站在巨人肩上的思考 [连载 ...
读完这两节,我基本就一个字,“基本帅呆了”。
-- by spinach -
站在巨人肩上的思考 [连载 ...
终于等到了,慢慢看。
-- by spinach -
站在巨人肩上的思考 [连载 ...
期待下文
-- by spinach






评论排行榜