不懂一些C++语法

Not understand some C++ syntax

本文关键字:语法 C++ 不懂      更新时间:2023-10-16

Helo,我是C++编程新手。我不明白这几行代码...

SomeClass someClassObject(35);
...
someClassObject = SomeClass(46);

首先,"someClassObject = SomeClass(46)"是做什么的?它是否像 SomeClass 的指针,例如:"someClassObject = new SomeClass(46)"在堆栈上所做的?

这里不涉及指针。 SomeClass(46)构造一个临时对象,通常在堆栈上。接下来是变量 someClassObject 的赋值。此赋值的确切语义可以通过重载赋值运算符来用户定义。

PS:请注意语句末尾缺少的分号。

SomeClass(46)通过调用将数字46传递给堆栈的构造函数,在堆栈上构造一个新的SomeClass实例。

someClassObject = SomeClass someClassObject上调用operator=的某个实例。

除非构造函数被声明为显式,否则它也可以写成:

someClassObject = 46;

看看这个例子:下面粘贴 http://ideone.com/7kgWob:

#include <iostream>
using namespace std;
class SomeClass
{
private:
    int i = 0;
public:
    SomeClass() { cout << "default constructorn"; };
    SomeClass(int val) { i = val; cout << "constructor getting int: " << val << 'n'; };
    ~SomeClass() { cout << "destrucing object having i: " << i << 'n'; };
    SomeClass& operator=(const SomeClass& rhs) { 
        cout << "operator= getting int: " << rhs.i << 'n';
        if (this != &rhs) {
            i = rhs.i;
        }
        return *this;
    }
};
int main() {
    SomeClass a(10);
    SomeClass b = SomeClass(20);
    SomeClass c(35);
    c = SomeClass(46);
    return 0;
}

它将输出:

constructor getting int: 10
constructor getting int: 20
constructor getting int: 35
constructor getting int: 46
operator= getting int: 46
destrucing object having i: 46
destrucing object having i: 46
destrucing object having i: 20
destrucing object having i: 10

实质上,它创建一个临时实例,并将当前实例设置为与临时实例相同的值(此时存在两个具有相同值的对象)。然后,它会释放临时人员。由于不涉及new,因此它发生在堆栈上。

SomeClass* someClassObject = new SomeClass(46);通过

调用采用整数的构造函数初始化了指向动态对象的 class SomeClass 类型的指针。

第二个你调用了重载赋值运算符,该运算符调用构造函数,该构造函数采用整数创建一个临时对象,然后将其分配给某个类对象。

不要忘记;它不是任意的。