c++ - 为什么在构造函数初始化期间我不能使用范围解析运算符?
问题描述
在构造函数的初始化期间使用以下代码中的范围解析运算符会给我错误。为什么只能在函数名前使用作用域解析运算符(ieVector::Vector(int i)?
class Vector {
public:
Vector(int s); // declaration an interface to definition or what part is.
double& operator[] (int i);
int size();
private:
double* elem;
int sz;
};
Vector::Vector(int s) : Vector::elem{new double[s]},Vector::sz{s} { }
double& Vector::operator[] (int i) { return Vector::elem[i]; }
int Vector::size() { return Vector::sz; }
int main() {
int s = 10;
Vector V(10);
return 0;
}
解决方案
成员初始化列表比一些任意表达式更受限制。
虽然您确实可以Vector::sz
在表达式中限定成员名称,例如 ,通常(其中sz
在范围内),但成员初始化列表的一部分的语法根本不支持这一点。你必须写name(init)
或name{init}
;没有其他的。
C++ 可以在这里允许限定名称,但是这样做绝对没有意义,同时使解析器更加复杂。
幸运的是,我们实际上不需要以任何方式担心这一点。
tl;博士:因为。
推荐阅读
- ios - 由于 Shader 警告和 Compiler 因 XPC_ERROR_CONNECTION_INTERRUPTED 而失败,Unity 应用程序无法在 iOS 上运行
- javascript - Angular 更改时按钮不会禁用
- python - 如何将python脚本的aws athena输出存储在excel中?
- python - 正则表达式在 Python 中多次前瞻和后瞻
- servicestack - Servicestack 允许多个用户使用相同的电子邮件
- tensorflow - 一台设备的批量大小的最佳选择是什么(在 TF 中使用镜像策略)?
- java - 即使表达式为假,IF 语句仍在运行
- java - 如何在跳转服务器上永久运行eclipse中的java代码
- ios - 使用未声明的类型“UIWindowScene”
- c++ - 多个继承变量正确返回