![](/img/trans.png)
[英]I'm trying to declare a constant string in my C++ class, but I get an “Invalid in-class assignment”, and I don't understand why
[英]I'm moving from C to C++ and I don't get this creation of a class
我是一名C開發人員,我決定轉向使用c ++作為主要語言來擴大我的視野。 從“C ++編程語言”學習我看到了這個創建類的例子:
class Vector {
public:
Vector(int s) :elem{new double[s]}, sz{s} { }
double& operator[](int i) { return elem[i]; }
int size() { return sz; }
private:
double* elem;
int sz;
};
我沒有使用sz {s} {}
為什么我們使用{}
? 為什么沒有;
在行尾?
因為懶惰的縮進。 讓我們更清楚地寫一下:
class Vector
{
private:
double* elem;
int sz;
public:
Vector(int s)
: elem{new double[s]}
, sz{s}
{
// ctor body
}
// More class members
};
看到? 你的神秘{}
只是構造函數的主體,它只是一個函數體,而在C中,函數不以a結尾;
。
以:
開頭的奇怪行是初始化列表 ,其中初始化成員變量和基類,即將構造函數寫入其構造函數的位置。 sz{s}
只是這個列表中的第二個元素。
最后一個{}
是構造函數的主體。 方法不需要;
在末尾。 之前的東西是初始化列表:
Vector(int s) :elem{new double[s]}, sz{s} { }
// ^^ initializer list ^^ body of the constructor
這也可以寫成
Vector(int s) { // no initializer list, but still
// members are initialized here already
elem = new double[s];
sz = s;
} // no ; here !!
但隨后會對該成員進行初始化,然后分配一個值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.