不懂一些C++语法
Not understand some C++ syntax
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
类型的指针。
第二个你调用了重载赋值运算符,该运算符调用构造函数,该构造函数采用整数创建一个临时对象,然后将其分配给某个类对象。
不要忘记;
它不是任意的。
相关文章:
- 1d 智能指针不适用于语法 (*)++
- 助记符和指向成员语法的指针
- 有人能分解一下这个c++模板的语法吗
- C++避免重复声明的语法是什么
- QMetaObject invokeMethod的基于函数指针的语法
- 这个语法std::class<>{}(arg1, arg2) 在C++中是什么意思?
- 为什么包含windows.h会产生语法错误,从而阻止类的实例化?(C2146,C2065)
- 单独定义模板化嵌套类方法的正确语法
- 共享指针和具有自定义删除程序的唯一指针之间的语法差异背后的任何原因
- 错误 C2760:语法错误:映射迭代器上意外的标记"标识符",预期的";"
- 为什么我会收到错误 C2143 语法错误:缺少"*"之前的';'?
- 奇怪的代码抛出编译错误模板< J,int aSize=10> C2143:语法错误:在"<"之前缺少";"
- 使用基类指针调用基类的值构造函数的语法是什么?
- 很好的语法来获取对向量/数组数据的大小引用?
- C++语法运算符功能?
- C++使用 rand 定义函数语法
- 什么文件可以修改 atom 的C++语法?
- 创建模板嵌套类实例的语法?
- C++语法差异:二维和一维数组(指针算术)
- 将信息输入到下面显示的结构向量中的正确语法/格式是什么