何时使用精心设计的类型说明符

Shi*_*rik 8 c++ coding-style

是否有特别好的理由选择使用精心设计的类型说明符?例如,在某些情况下,需要使用templatetypename关键字来消除依赖关系template或类型的歧义.

但我想不出任何例子,如枚举这样的事情.请使用以下代码示例:

enum Foo { A,  B };

void bar(Foo foo);
void baz(enum Foo foo);
Run Code Online (Sandbox Code Playgroud)

为什么我可以选择使用baz()提供的语法bar()(反之亦然)?有什么含糊不清的案子吗?

AnT*_*AnT 9

没有理由使用这样的说明符,除非您正在处理名称被不同"种类"的名称隐藏的情况.例如,声明一个以Foo枚举声明命名的变量是完全合法的,因为,非正式地说,对象名称和类型名称存在于独立的"命名空间"中(更多正式规范见3.3/4)

enum Foo { A, B };

int Foo;
Run Code Online (Sandbox Code Playgroud)

在之后int Foo的声明,你的bar声明将会无效,而更详细的baz声明仍然有效.