【发布时间】:2018-01-12 04:20:15
【问题描述】:
我偶然发现了一个函数实现,它为相同类型的参数回收类型名称。代码编译并且似乎完全符合预期。这是一个最小化的版本:
#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;
更新 #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;
}
【问题讨论】:
-
它是有效的 C++。 C++ 是否好还有待商榷。
-
@Ron 我有一种强烈的感觉,那就是它可能真的很糟糕,tried to illustrate that。
标签: c++ c naming-conventions variable-declaration function-definition