此关键字在启动器中用于解决歧义
this keyword in initilizer for ambiguity resolution
我遇到了使用与以下参数相同的参数初始化成员数据的方法:
class T {
int x;
public:
T(int x) : x(x) {} // assign parameter x to T::x
};
它工作正常。但是当我尝试使用此关键字显式初始化时,发生错误。
T(int x) : this->x (x) {} // error
谁能解释错误的原因?
根据成员初始值设定项列表的语法,这里期望的是标识符,而this->x
不是。
类或标识符 ( 表达式列表(可选) )
类或标识符 - 任何标识符、类名或 decltype 表达式,用于命名非静态数据成员、直接或虚拟基,或(用于委托构造函数)类本身
如上面所示的可能标识符,x(x)
很好,没有歧义,根本不需要使用this->
。
要初始化的成员已被放置在初始值设定项列表中以消除歧义。尝试使用 this
来引用成员是一个错误。用于构造成员的值同样不明确,因为不能从自身构造成员。这就是为什么允许您对成员和构造函数参数使用相同的名称。
不能以这种方式使用初始化列表。如果你想要等效的行为,你必须把赋值放在定义中。
class T {
int x;
public:
T(int x) {
this->x = x;
}
};
相关文章:
- Arduino 用于语句错误。令牌之前的预期')' ';'。如何解决这个问题?
- 如何巧妙地编写两个函数——一个用于检查是否存在解决方案,另一个用于获取所有解决方案
- 递归解决方案,用于显示线性链表数组
- 什么是最快的解决方案,用于读/写入哈希映射
- 大o用于以下递归解决方案
- 用于在 Visual Studio 中为整个项目或解决方案定义带有参数的预处理器宏的选项
- 未解决的外部符号C 用于继承和构造函数
- 解决 GNU 中用于重新声明的链接器错误
- 稀疏带状 Ax=b 的批量 CUDA 解决方案,用于各种 b
- 从Visual Studio解决方案生成生成生成文件(用于GCC)
- 众所周知的解决方案,用于避免dynamic_cast的缓慢
- Visual Studio 2010 源代码管理集成不适用于解决方案文件夹之外的文件
- 一个好的,简单的,便携式的解决方案,用于等待输入C++
- 此关键字在启动器中用于解决歧义
- 用于交替 for 循环的 C++ 通用解决方案
- GoogleMock SaveArg 用于保存数组?编译器抛出错误,我还没有看到一个好的解决方案
- 用于分组以解决冲突的算法
- 用于未使用参数参考的单线解决方案
- C++模板:专用成员函数,用于解决主模板中不明确的重载情况
- 用于编程练习(管件)的回溯解决方案