结构名称不遮盖变量名称
struct name not shadowing variable name
我注意到以下代码使用最新的编译器进行编译:
int main()
{
int x;
struct x;
x = 210; // ←
}
我记得几年前它没有编译。
查找规则是否在 C++11 或 C++14 中更改以使此代码"工作"(从而中断使用 struct variable_name;
作为确保在以下代码中不使用变量的方法)?
更新:显然我记错了。我已经验证了即使使用 Visual C++ 2010 也能编译代码。但是,当用于参数时,struct
名称位于内部作用域中,并且阴影,如以下代码所示:
void foo( int x )
{
struct x;
x = 210; // ← Error
}
int main()
{
}
因此,我选择了没有变化的答案作为"解决方案";规则总是这样。
[basic.scope.hiding]/2 类名 (9.1) 或枚举名 (7.2) 可以通过在同一作用域中声明的变量、数据成员、函数或枚举器的名称来隐藏。如果类或枚举名称以及变量、数据成员、函数或枚举器在同一作用域(以任意顺序)声明,则在变量、数据成员、函数或枚举器名称可见的任何位置,类或枚举名称都将隐藏。
这种语言自 98 年C++以来一直存在。如果您见过一个工作方式不同的编译器,那么该编译器是预标准的,或者只是普通的错误。
你所做的是转发struct x
声明。您没有声明新变量x
。例:
struct foo;
int foo;
struct foo {
int foo;
};
struct foo thisisfoovariable;
上面是只有两个变量的声明:foo(类型int
)和thisisfoovariable,类型为struct foo
。
相关文章:
- 你能重载对象变量名本身返回的内容吗
- 在C/C++中将变量名定义为__00000001有什么好处吗
- C++变量名(可以将 main 声明为变量,但对于其他函数名称则不然)
- 在 c++ 中将变量作为结构构造函数中的引用传递
- C++ - 声明中变量名后面的括号
- 如何使替换 c 函数的变量名成为错误?
- C++ 如何在包含两个变量的结构中存储与变量不同数量的值?
- c++ 将函数参数(带有模板变量的结构)转换为函数体内的字符串
- 是否可以创建没有变量名的变量
- fstream库,试图创建一个变量名为(c++)的文件
- 一个数组C++中的消息和变量名
- 在变量名后声明带有 () 的非内部类型与不使用变量名的行为不同。即 std::map<int,char>x(); - 这是怎么回事?
- 成员变量的结构化绑定
- 如何初始化具有常量变量的结构数组
- 如何访问结构中的变量,该变量位于结构中的向量中
- 数组的变量名和该数组的地址有什么区别?
- Java 中的私有变量和 C++ 结构中的私有变量有什么区别?
- 如何将变量名设置为字符串?C++
- 为什么我需要将变量指向结构
- 按变量名遍历结构