小编Del*_*llo的帖子

C++类型转换常见问题

在哪里可以找到一篇关于C++类型转换的非常容易理解的文章,涵盖了所有类型(促销,隐式/显式等)?

我已经学习了一段时间的C++,例如,虚拟函数机制对我来说比这个主题更清晰.我的观点是,这是因为教科书的作者太复杂了(参见Stroustroup的书等等).

c++ type-conversion

12
推荐指数
1
解决办法
6235
查看次数

静态初始化命令惨败

在他的"用C++思考"(第10章)中,Eckel描述了Jerry Schwarz为解决惨败而开创的技术.他说如果我们想要将x初始化为100和y到200并在所有翻译单元之间共享它们,我们创建一个如下所示的Initializer.h:

extern int x;
extern int y;
class Initializer {
   static int initCount;
   // if (initCount++ == 0) x = 100 & y = 200
   /* ... */
};
static Initializer init;
Run Code Online (Sandbox Code Playgroud)

在实现文件中我们有

#include "Initializer.h"
int x;
int y;
int Initializer::initCount;
Run Code Online (Sandbox Code Playgroud)

和Eckel说"静态初始化(在实现文件中)将强制所有这些值为零".

让我考虑以下情况:编译器在包含该头的其他文件之后处理实现文件(这意味着x和y已经在该另一个文件中设置为100和200).编译器看到了int x,它会做什么?它会将x和y设置为零,从而消除初始化和以前文件中的所有可能更改吗?但如果确实如此,那么initCount也将设置为零,打破整个技术.

c++ static initialization static-order-fiasco

10
推荐指数
1
解决办法
2759
查看次数