基础概念#
在 C++ 标准之下,很多重要的功能都是依赖 实现的 (implementation-defined):对于 C++ 语言的某些概念,每个实现版本都必须为之设定恰当的、定义良好的语法行为,同时信息记录行为规范。
1char c1 = 64;
2int t = 1025;
3char c2 = t;
第 1、2 行是定义良好的:在任何情况下
char
都至少包含 8 个二进制位,肯定可以存下 64;int
是 32 个二进制位,同样没有问题。第 3 行是依赖于实现的:如果当前情况下 char 只占 8 位,则值被截断。
大多数依赖于实现的功能都与运行程序的硬件与系统密切相关。
为了尽可能满足可移植性的要求,首先需要明确哪些特性是依赖于实现的,然后把这些敏感的部分整理在一起,放到程序的某个带有明显标记的位置中。
还有一种行为是 不确定的 (sunspecified):由于某些原因造成确切的行为无法预知,便认为它是不确定的。与依赖于实现的行为相比不确定的行为是一种很糟糕的行为。
如果具体实现无法为某一概念指定明确合理的行为,则 C++ 标准会认为它是 未定义 的。
重要
程序员应该投入更多精力以确保程序中没有不确定的或未定义的部分。