【问题标题】:What if an argument has the same name as that of a data member?如果参数与数据成员的名称相同怎么办?
【发布时间】:2020-05-01 22:22:52
【问题描述】:
#include <iostream>

struct A
{
    A(int n) { std::cout << n; }
    int n{2};
};

int main()
{
    A a{1};
}

输出是1 而不是2

如果参数名称与数据成员的名称相同,C++ 标准是否定义首选参数名称?

【问题讨论】:

  • 复制变量名是一个非常糟糕的主意,即使它在语言中技术上是合法的。这会导致混淆您打算使用哪个变量。
  • 阅读编译器警告。
  • 使用 clang 9.@MichaelChourdakis 默认选项无警告
  • @xmllmx 那么太糟糕了。不惜一切代价避免隐藏现有变量。
  • @xmllmx 启用标志-Wshadow-all 无论如何,这是一个很好的标志。

标签: c++ class namespaces standards datamember


【解决方案1】:

参数位于比成员变量“更近”的范围内,因此参数隐藏成员变量。

显而易见的解决方案是重命名参数(或成员变量),这样它们就不再一样了。

您也可以使用this-&gt;n 来显式使用成员变量。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-13
    • 2020-08-16
    • 1970-01-01
    • 1970-01-01
    • 2013-08-05
    • 2014-01-04
    • 1970-01-01
    • 2019-11-23
    相关资源
    最近更新 更多