带有const成员的构造函数的语法
Syntax on Constructors with Const Members
我一段时间没有完成C 编码,而我的朋友在他的作业方面遇到了麻烦。我从来没有真正与const
合作,这使它成为噩梦,因为我无法找到适合构造函数的正确语法。想象一下我在dvd.h
中有这个:
class DVD {
const string title;
int minutes;
double price;
public:
DVD(const string t, int m, double p);
}
3个私有成员变量,string
是const
。构造函数还采用const string
。
现在,在dvd.cpp
中,我可以做以下操作:
#include "dvd.h"
DVD::DVD(const string t, int m, double p) {
const string title = t;
minutes = m;
price = p;
}
,世界上一切都很好。但是,当我将dvd.h
中的minutes
修改为const
(这是他的教授构造文件的方式)时,我们将其在dvd.h
中:
class DVD {
const string title;
const int minutes; // Here is the change
double price;
public:
DVD(const string t, int m, double p);
}
所以,现在minutes
是const
,我会得到以下汇编错误:
assignment of read-only member 'DVD::minutes' dvd.cpp
uninitialized member 'DVD::minutes' with 'const' type 'const int' [-fpermissive] dvd.cpp
我想这是有道理的,因为我正在尝试将一个值设置为 const
变量。因此,我尝试做与dvd.cpp
中的const string title
相同的事情,以解决错误:
DVD::DVD(const string t, int m, double p) {
const string title = t;
const int minutes = m; // Was 'minutes = m;'
price = p;
}
并得到以下(1)错误和(1)警告:
uninitialized member 'DVD::minutes' with 'const' type 'const int' [-fpermissive] dvd.cpp
unused variable 'minutes' [-Wunused-variable] dvd.cpp
所以我想我正在努力弄清楚 darn语法是什么... title
和 minutes
应该是 const
,但是 DVD
的构造函数的参数列表仅为 const string
。我无法弄清楚我缺少什么 - 自上次在C 中编码以来已经有一段时间了。
const string title = t;
声明局部变量。在世界上一切都不好:您没有将成员变量设置为所需的价值。要初始化成员,请使用构造函数的启动器列表:
DVD::DVD(const string t, int m, double p) :
title(t), minutes(m), price(p)
{}
您的版本尝试 default-initialise initialiser列表中未提及它们),然后 sigtion 。这对无法默认限制的成员(例如,参考文献或没有默认构造函数的类类型)或分配给(例如const
成员)。
您可以初始化const
和非const
成员,就像这样:
DVD::DVD(const string t, int m, double p)
: title(t)
, minutes(m)
, price(p)
{}
请注意,如果您使用的是C 98/03,则可能需要将string
参数作为const&
(以避免使用无用且效率低下的调用来字符串复制构造函数):
DVD(const string& t, ...other stuff...)
... same init as above
如果您使用的是C 11(实现移动语义),则可以按值传递字符串参数,而std::move()
从值:
DVD::DVD(string t, int m, double p)
: title(std::move(t)),
, minutes(m)
, price(p)
{}
- 返回语句中的构造函数语法
- 复制构造函数语法错误:myclass 没有成员 mymember
- 在 c++ 中移动 2d 数组的构造函数(语法逻辑不清楚):
- C++类构造函数语法的解释
- C++ 使用指针移动构造函数(*&&&语法)
- 复制构造函数语法并显示构造函数的值
- 基元类型初始化的构造函数语法和赋值语法之间的差异
- 结构构造函数语法
- 构造函数语法两边的括号
- C++复制构造函数语法:对 r/l 值的与号引用
- 奇怪的模板构造函数语法
- c++新手,你能解释一下这个构造函数语法吗?
- c++中很少用到的构造函数语法
- c++ shared_ptr复制构造函数语法
- 模板类构造函数语法
- C++构造函数语法的详细信息
- c++类构造函数语法
- 派生类构造函数语法
- C++引用构造函数语法
- 使用构造函数语法初始化引用