也许我也受了这种影响:在我最早的一些使用“readonly”的例子中
readonly int c = 10;
比这个更具有可读性:
int readonly c = 10;
我创造的那些最早的使用“const”的(C或C++)代码,看来已经在全球范围内取代了“readonly”。
我记得这个语法的选择在几个人——例如Dennis Ritchie——当中讨论过,但我不记得当时我倾向于哪种语言了。
注意在固定指针(const pointer)中,“const”永远出现在“*”之后。例如:
int *const p1 = q; // 指向int变量的固定指针
int const* p2 = q; //指向int常量的指针
const int* p3 = q; //指向int常量的指针
使用宏有什么问题?
宏不遵循C++中关于范围和类型的规则。这经常导致一些微妙的或不那么微妙的问题。因此,C++提供更适合其他的C++(译注:原文为the rest of C++,当指C++除了兼容C以外的部分)的替代品,例如内联函数、模板与名字空间。
考虑一下:
#include "someheader.h"
struct S {
int alpha;
int beta;
};
如果某人(不明智地)地写了一个叫“alpha”或“beta”的宏,那么它将不会被编译,或者被错误地编译,产生不可预知的结果。例如,“someheader.h”可能包含:
#define alpha ’a’
#define beta b[2]
将宏(而且仅仅是宏)全部大写的习惯,会有所帮助,但是对于宏并没有语言层次上的保护机制。例如,虽然成员的名字包含在结构体的内部,但这无济于事:在编译器能够正确地辨别这一点之前,宏已经将程序作为一个字符流进行了处理。顺便说一句,这是C和C++程序开发环境和工具能够被简化的一个主要原因:人与编译器看到的是不同的东西。
延伸阅读
文章来源于领测软件测试网 https://www.ltesting.net/