当传入的成员变量和参数的名称相同时,是否存在未定义的行为?

Is it undefined behavior when both the name of the member variable and parameter being passed in are the same?

本文关键字:是否 存在 未定义 成员 变量 参数      更新时间:2023-10-16

假设我有一个像这样的类:

class Base
{
  int a;
  public void Initialize(int a)
  {
    a = a;
  }
}

(是的,这段代码是糟糕的编程实践,但我只是写它,所以它可以作为一个例子)

对于Initialize函数,成员变量的名称和传入的形参都是相同的。

在这种情况下,这是未定义的行为吗?或者,如果存在歧义,编译器会选择成员变量(或形参)。

它定义的行为…将局部变量a(参数)赋值给自身。如果您想将其分配给成员,请使用this->a = a;

像这样在Initialize()中使用时,是的,您只是将a赋值给a(对int类型不做任何事情)。然而,对于构造函数和初始化列表,它的工作方式不同!如果您的代码如下所示:

Base(int a) : a(a) {}

它实际上将成员a初始化为参数a