gpt4 book ai didi

C++ - 为默认类型重载赋值运算符

转载 作者:太空宇宙 更新时间:2023-11-04 14:36:07 25 4
gpt4 key购买 nike

我想为“int”、“long”等类型重载赋值运算符。也就是说,我想使用如下代码:

class CX {
private:
int data;
...
};

CX obj;
int k;
k = obj; // k should get the value of obj.data

显然赋值运算符不能是友元函数。我如何实现上述目标?

我可能遗漏了一些简单的东西,但就是想不出执行此操作的语法/方法。

此外,一个 IMP 限制 - 我们不能使用 get/set 方法,因为::在发布代码中,我们会将 CX 类型定义为 int 或 long(根据需要),但在 DEBUG 代码中,我们希望将其作为一个类(用于在数千个地方进行自动类型检查)。代码需要通用。原因是编译器(至少我们正在使用的版本)在某种程度上无法优化所有操作,如果 CX 是一个类。


一个问题是——我不想让它通过:

CX x; long p; p = x;

我假设下面的转换解决方案也会隐式地使多头/空头等代码通过。(如果没有,那么这正是我要找的!)。

在相关说明中,回答 David 的问题——我想重构的原因是——我们希望能够将 CX 切换为 32 位或 64 位。因此,我们希望禁止任何隐式转换并在编译时捕获它们。现在,反过来 - (不允许

CX x = some_64_bit_int;

但允许

CX x = some_32_bit_int;

我通过使用默认情况下在编译时断言的模板化 = 运算符来实现,但为我想要的类型重载它。


以防万一您觉得这是一个糟糕的设计或者我应该尝试其他替代方案 - 我需要的原因是:我们有数千行遗留代码,其中某些内容只是类型定义为“int” .

typedef int CX;

到处都有作业,例如:

CX x; int k; k = x;    // Writing the simplified relevant code here

我正在从事一个将 CX 更改为类的项目。在第一阶段,我们希望修复所有编译错误(使 CX 成为一个类),尽可能少地更改代码。

最佳答案

如果您唯一想要的是转换为 int,则可以在您的类中添加一个转换运算符。

class ABC
{
public:
operator int() { return data; } // cast operator
private:
int data;
...
};

关于C++ - 为默认类型重载赋值运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4049887/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com