当前位置:嗨网首页>书籍在线阅读

05-有特殊含义的标识符

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

B.4 有特殊含义的标识符

C++社区讨厌新增关键字,因为它们可能与现有代码发生冲突。这就是标准委员会改变关键字auto的用法,并赋予其他关键字(如virtual和delete)新用法的原因所在。C++11提供了另一种避免新增关键字的机制,即使用具有特殊含义的标识符。这些标识符不是关键字,但用于实现语言功能。编译器根据上下文来判断它们是常规标识符还是用于实现语言功能:

class F
{
    int final;                           // #1
public:
...
    virtual void unfold() {...} = final; // #2
};

在上述代码中,语句#1中的final是一个常规标识符,而语句#2中的final使用了一种语言功能。这两种用法彼此不会冲突。

另外,C++还有很多经常出现在程序中,但不被保留的标识符。这包括头文件名、库函数名和main(必不可少的函数的名称,程序从该函数开始执行)。只要不发生名称空间冲突,就可将这些标识符用于其他目的,但没有理由这样做。也就是说,完全可以编写下面的代码,但常识告诉您不应这样做:

// allowable but silly
#include <iostream>
int iostream(int a);
int main ()
{
    std::
cout << iostream(5) << '\n';
    return 0;
}
int iostream(int a)
{
    int main = a + 1;
    int cout = a -1;
    return main*cout;
}