mic*_*190 5 c++ this compiler-warnings shadowing visual-c++
我最近开始使用“警告级别4”并将C ++编码时的警告视为错误。我想要一些有关以下代码段的更深入的信息:
struct Foo
{
Foo(int size)
//:size{ size } // <- More on this later.
{
this->size = size;
}
void func(int size)
{
this->size = size;
}
int size;
};
int main()
{
Foo a{ 1 };
a.func(2);
}
Run Code Online (Sandbox Code Playgroud)
因此,我从Visual Studio 2019中收到以下警告/错误:
错误:C2220-警告被视为错误-未生成任何“对象”文件。
警告:C4458-'size'声明隐藏了类成员。
该警告表示该size
成员正在被也称为的方法的参数隐藏size
。输出表明错误不是来自构造函数,而是来自func
方法。我觉得这很令人困惑,因为构造函数似乎没有这个问题(实际上,删除func
允许片段进行编译)。
降低警告级别可以使应用程序编译,并且看起来可以按预期运行。使用初始化程序列表而不是构造函数的主体(请参见注释行)似乎也可以工作,但是我猜测这是由于初始化程序列表语义所致。
我了解到该错误表明size
参数名称func
与Foo
的同名成员冲突,但是this
关键字不应该解决这种混淆吗?这仅仅是微软的编译器过于严格吗?
归档时间: |
|
查看次数: |
805 次 |
最近记录: |