根据Stanley Lipp的C ++ Primer 5th Ed:
该标准还保留了一组用于标准库的名称。我们在自己的程序中定义的标识符可能不包含两个连续的下划线,标识符也不能以下划线开头,后面紧跟一个大写字母。此外,在函数外部定义的标识符可能不以下划线开头。
以下所有内容都已编译:
g ++ -std = c ++ 11 -o test test.cc
int _I=40;
int main() {
int __=10;
int _B=20;
}
我认为不应该编译..
答案 0 :(得分:3)
文本说“标准也保留一组名称” - 这并不一定意味着该表单的名称会导致编译器错误或警告。只是如果您选择使用该表单的名称,它们可能与编译器或库定义的其他名称冲突。
答案 1 :(得分:1)
引用意味着不能保证这些名称可以起作用:它们可能与实现使用的名称冲突。
Mike Seymour在评论中写道,
“您无需知道标准库中的名称。您只需要知道保留哪些名称 - 您在问题的一个短句中描述了这些名称。编译器无法判断它是在编译你的代码还是库的,所以它无法判断是否应该允许这样的名称 - 你只需要知道这个规则(你做了,因为你问了一个关于它的问题)并遵循它。