我偶然发现了一个函数实现,它为相同类型的参数回收类型名称。代码编译并且似乎完全符合预期。这是一个最小化的版本:
#include <iostream>
using namespace std;
struct X {
int v;
};
void print_X(const X& X) // <--- here the identifier X has *two different meanings*
{
cout << "X.v:" << X.v << endl;
}
该代码是针对 Borland C++ 5.6.4 开发的
我尝试了几种不同且更新的编译器:
- C++11(mingw32-g++ 4.9.2,随 CodeBlocks 16.01 提供)
- C++ (gcc 6.3)
- C++14 (gcc 6.3)
- C++ 4.3.2 (gcc 4.3.2)
- C++14 (clang 4.0)
大家无怨无悔地接受它。
我不认为它是好的 C++,但是......
它是有效的 C++ 吗?如果是的话,它在未来是否有效?
更新
多么可怕!直到现在我才看到,对于简单的变量声明也是如此:
X X;
演示:http: //ideone.com/a9GM49
更新#2
C++ 与 C 语言共享此功能:
#include <stdio.h>
typedef struct X {
int v;
} X;
int main()
{
X X;
X.v = 7;
printf("X.v:%d\n", X.v);
return 0;
}
演示:http: //ideone.com/nheZTa