【发布时间】:2016-10-29 10:48:12
【问题描述】:
为什么下面的代码没有硬错误?类型别名和类名完全一致(编译器clang):
using S = struct S;
struct S {};
S s;
int main()
{
}
以下代码中的变量定义中究竟使用了哪个名称(符号或类型别名)?
using S = struct S {};
int main()
{
S s;
}
【问题讨论】:
-
因为C和它的
typedef struct S {} S; -
using S = struct S;不隐藏,但 重新定义S既是 typedef 名称又是类名称(具有两个属性的单个名称)。你会经常听到有人说using S = struct S;引入了两个名称,C++ 会搜索多个“符号空间”,但在 C++ 中不是这样。可以在open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#407 找到对此的深刻讨论。
标签: c++ c++11 types language-lawyer