c++ - 具有相同变量名的成员的 setter 行为是在 C++ 中确定的吗?

标签 c++

来自 python,在那里你可以用 self 关键字分配一个成员,我想知道在 C++ 中不使用 this 关键字会有什么行为,因为编译器会照顾分配成员。

换句话说,当我这样做时会发生什么:

class SomeClass
{
private:
    int someVariable;

public:
    void setSomeVariable(int someVariable);
};

void SomeClass::setSomeVariable(int someVariable)
{
    someVariable = someVariable;
}

因为编译器没有提示,我想知道这是否是按照约定为成员编写访问器的正确方法,以及行为是否已确定(与 C++ 中函数参数的求值不同)

最佳答案

在您的例子中,类成员 someVariable 被传入函数的参数隐藏

所以您的代码正在执行一个简单的自赋值:someVariable = someVariable 是一个等价于 someVariable 的表达式。

为了消除歧义,使用this->someVariable = someVariable;

(我承认,我对类成员采用了老式的 m_ 前缀,对静态成员采用了 s_ 前缀。但近年来这种做法已经不受欢迎了,这在 Java 中几乎是一种亵渎。)

关于c++ - 具有相同变量名的成员的 setter 行为是在 C++ 中确定的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35599708/

相关文章:

c++ - 由于我无法返回局部变量,从 C 或 C++ 函数返回字符串的最佳方法是什么?

c++ - 检测 boost 测试用例是否失败

c++ - std::istream 到无符号数值,如何检测负值?

c++ - HZ 变量未定义

c++ - 使用 Magick++ 创建一个新图像

c++ - move 语义和临时隐式 this

C++ 错误 "not all control paths return a value"

c++ - wxWidgets 获取显示 wxString(单行)所需的像素数 - wxDC::GetTextExtent 不能是唯一的方法

c++ - 任何 Hook 函数的单一接口(interface)

c++ - 使用自定义获取属性 boost 动态属性