c++ - 为什么 T::T::T::T::T::T 与 T 相同的类名?
问题描述
考虑以下“代码”:
struct T
{
T();
static int x;
};
T::T::T::T::T::T()
{
}
int T::x;
int main()
{
T t1;
T::T t2;
T* p=static_cast<T::T::T::T*>(&t1);
T::T::T::T::T::x=5;
}
它使用从 4.7 到 8 的 g++ 和从 3.5 到 6 的 clang++ 进行编译,没有任何错误或相关警告-pedantic-errors
。显然,类名后跟范围解析运算符可以重复,而不会影响所命名类类型的含义——就好像类嵌套在自身内部一样。
它是编译器中的错误吗?还是 C++ 语言真的以容忍这种滥用的方式定义?
如果它真的是符合标准的 C++ 代码,是否有任何理由允许这样做,还是只是为了简化标准的措辞?
解决方案
推荐阅读
- laravel - Laravel nova 文件字段 | 如何在存储文件之前获取资源 ID
- android - 如何在 Flutter 中制作像谷歌任务 ui 这样的可滚动列表?
- css - 汉堡菜单 - 垂直对齐列表项
- java - 查找 ArrayList (Int) 中特定元素的所有索引
- graphql - Relay 编译器抛出语法错误:在 Github Action 中运行时出现 Unexpected "$"
- c# - C#,实体框架,如何同时更新(删除、添加、编辑)多行?
- python - curve_fit 对颠簸的数据点表现不佳
- quarkus - MongoDB Panache 是否支持更改流?
- perl - Perl inheritance - Subroutine override
- c# - 如何使用 Microsoft Graph API 在 Microsoft Team Channel 中发布带有附加图像的消息