C++ Class 构造函数设置变量 这两种方式有什么区别?

C++ Class Contructor setting Variables whats the difference between those tho ways?

首先是示例代码:

cPerson.h:

#pragma once
class cPerson
{
public:
    cPerson();
    ~cPerson();
    int Age;
};

cPerson.cpp

#include "cPerson.h"

cPerson::cPerson()
{
    this->Age = 3; // Way 1
    cPerson::Age = 4; // Way 2
}

cPerson::~cPerson() { }

好的,我的问题是:

如果我们在 C++ 中定义一个新的 Class,有两种方法可以设置初始值。使用 "this" 指针有(方式 1),或使用范围运算符( :: )有(方式 2)。 在学校里,我是用 "this->" 学的。现在,在不使用 C++ 多年之后,我开始再次使用它并找到了第二种方法,即使用范围运算符。 两种方式都可以正常工作,但它们之间的确切区别是什么,"faster"/"better" 方式是什么?如果我正在编程,我就是那种喜欢知道我的 ram/cpu 到底发生了什么的人。

所以我希望有人能帮助我,在此先感谢。

构造函数的更好写法

cPerson::cPerson() : Age(3)
{
}

从那时起,您就可以构造对象的 const 实例。考虑以小写字母开头 Age:这样会更传统。

您可以通过编写更简洁的代码来完善您的第一种方法Age = 3;:如果成员依赖于复杂计算的结果,有时在构造函数主体中初始化成员是不可避免的。

使用 :: 是特殊的:如果成员是在基础 class 中定义的,则使用范围解析运算符将失败。但它确实偶尔会用到,特别是当你需要消除 shadowed 基础 class 成员的歧义时。

最后,从 C++11 开始,您可以将 class 简化为

struct cPerson
{
    int Age = 3;
};

C++11 allows in-class initialization of non-static and non-const members. What changed?