构造函数参数和同名成员

lcs*_*lcs 5 c++ oop language-lawyer initialization-list

我很好奇以下代码是否有效。静态分析在此构造函数上给出错误。

总结:成员变量'A'是自己初始化的。

总结:成员变量'B'是自己初始化的。

总结:成员变量'C'是自己初始化的。

class Foo
{
public:
    Foo(int A, int B, int C);
private:
    int A;
    int B;
    int C;
}

Foo::Foo(int A, int B, int C) : 
A(A),
B(B),
C(C)
{}
Run Code Online (Sandbox Code Playgroud)

我知道这不是一个好的做法,可能应该改变,但是我想知道静态分析警告是否是误报并且成员变量是否会被正确初始化。

gsa*_*ras 2

它们将按照初始化列表中的指示正确初始化。

事实上,编译代码给出:

Georgioss-MacBook-Pro:~ gsamaras$ g++ -Wall main.cpp
main.cpp:6:9: warning: private field 'A' is not used [-Wunused-private-field]
    int A;
        ^
main.cpp:7:9: warning: private field 'B' is not used [-Wunused-private-field]
    int B;
        ^
main.cpp:8:9: warning: private field 'C' is not used [-Wunused-private-field]
    int C;
        ^
3 warnings generated.
Run Code Online (Sandbox Code Playgroud)

当然,这些警告是无关紧要的。


进一步阅读:使用与 C++ 标准允许的成员变量相同的名称来初始化构造函数参数的成员变量?


我知道这不是一个好的做法。

这也不是一件坏事。代价是您不会引入新名称(例如人们通常看到的大写/小写字母)。我认为这是一个见仁见智的问题。


归档时间:

查看次数:

2770 次

最近记录:

9 年,1 月 前