了解一些涉及 const 类型的C++代码
Understanding some C++ code involving const type&
关于这个问题中报告的代码,我有以下问题来确保我理解发生了什么。
class Integer32 {
public:
Integer32() {
this->setData(0);
}
Integer32(const Integer32& x) {
this->setData(x.getData());
}
Integer32(int data) {
this->data = data;
}
Integer32& operator=(const Integer32& x) {
if (this != &x) {
this->setData(x.getData());
}
return *this;
}
Integer32& operator=(const int& x) {
this->setData(x);
return *this;
}
Integer32 operator+(const Integer32& x) const {
return Integer32(this->getData() + x.getData());
}
void setData(int data) {
this->data = data;
}
int getData() const {
return data;
}
private:
int data;
};
int main(int argc, char** argv) {
Integer32 a, b, c;
a = 7;
b = 9;
a = b;
c = a + b;
return 0;
}
-
a, b
是非常量Integer32
,对吧? -
b = 9
调用我的运算符重载=
,文字9
会发生什么?我的运算符需要一个const int&
,而我传递一个文字常量。 -
a = b
需要b
const Integer32&
,这里的选角是从Integer32
到const Integer32&
进行的吗? -
c = a + b
,两者都a,b
转换为常量吗?
a,b是非常量整数32,对吧?
是的。(我在任何地方都看不到const
,是吗?
b = 9调用我的运算符重载 =,文字 9 会发生什么? 运算符需要一个 const int&,而我正在传递一个文字常量。
9
是 int
类型的临时。不允许将临时项作为引用传递,除非引用const
。在这种情况下,这是真的,临时的寿命延长了,允许Integer32& operator=(const int& x)
.
a = b 要求 b 是常量 Integer32&,是这里执行的强制转换 从 Integer32 到 const Integer32&?
是的。隐式强制转换由编译器完成。
c = a + b,a,b 都转换为常量吗?
这个问题也是如此。第一个Integer32 operator+(const Integer32& x)
是使用操作数a
和b
完成的。(b 隐式转换为 const Integer32&
(然后Integer32& operator=(const Integer32& x)
使用操作数c
和表达式的结果完成 a.operator+(b)
这是一个临时Integer32
。
相关文章:
- ArduinoJson 6.15.2:JsonObject没有命名类型
- 防止主数据类型C++的隐式转换
- 大量序列中核苷酸类型的快速计数
- 如何从C++中的依赖类型中获得它所依赖的类型
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 是否可以初始化不可复制类型的成员变量(或基类)
- 如何获取std::result_of函数的返回类型
- 从父命名空间重载类型
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 我想将一个对T类型的非常量左值引用绑定到一个T类型的临时值
- Openssl 1.1.1d无效使用不完整的类型"struct dsa_st"
- 访问者访问变体并返回不同类型时出错
- 在VS2010-VS2015下编译时,如何使用decltype作为较大类型表达式的LHS
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- C++ 雷神库 - 使用资源加载器类时出现问题(不命名类型)
- 模板元程序查找相似的连续类型名称
- 是否可以从int转换为enum类类型
- 构造函数正在调用一个使用当前类类型的函数
- 我应该使用什么来代替void作为变体中的替代类型之一
- 类中的字符串不命名类型