C++自定义类型

C++自定义类型,c++,operator-overloading,custom-type,C++,Operator Overloading,Custom Type,我有一个类int32,它的设置方式基本上可以作为int操作符重载进行接口,但有一部分我没有得到 int32 i32 = 100; // Works int i = 200; // Works i32 += 10; // Works i32 -= 10; // Works, i32 = 100 right now i = i32; // Doesn't work 我需要重载哪个运算符来实现引用i32返回其存储值,在本例中为100,或者如何实现?您可以添加一个运算符int: 请注意,它有两种味道。

我有一个类int32,它的设置方式基本上可以作为int操作符重载进行接口,但有一部分我没有得到

int32 i32 = 100; // Works
int i = 200; // Works
i32 += 10; // Works
i32 -= 10; // Works, i32 = 100 right now
i = i32; // Doesn't work
我需要重载哪个运算符来实现引用i32返回其存储值,在本例中为100,或者如何实现?

您可以添加一个运算符int:

请注意,它有两种味道。上述情况将允许

int32 foo;
int i = foo;
如果将转换运算符定义为显式

然后,上述设计将失败,并需要显式强制转换:

int32 foo;
int i = static_cast<int>(foo);
您可以添加一个运算符int:

请注意,它有两种味道。上述情况将允许

int32 foo;
int i = foo;
如果将转换运算符定义为显式

然后,上述设计将失败,并需要显式强制转换:

int32 foo;
int i = static_cast<int>(foo);
您应该编写转换运算符

int32 a = 1;
std::int32_t b = a;//OK
但是,指定显式转换和强制转换转换是有害的

int32 a = 1;
//std::int32_t b = a;//NG
std::int32_t b = static_cast<std::int32_t>(a);
注意:不应将转换运算符写入int,因为不能保证int为32位

您应该编写转换运算符

int32 a = 1;
std::int32_t b = a;//OK
但是,指定显式转换和强制转换转换是有害的

int32 a = 1;
//std::int32_t b = a;//NG
std::int32_t b = static_cast<std::int32_t>(a);

注意:不应将转换运算符写入int,因为无法保证int为32位。

在int32类上实现转换运算符

class int32
{
    // conversion operator
    operator int() const
    { 
        int ret = // your logic
        return ret;
    }
}

此转换运算符将原语类型int转换为您定义的类型int32

在int32类上实现一个转换运算符

class int32
{
    // conversion operator
    operator int() const
    { 
        int ret = // your logic
        return ret;
    }
}

此转换运算符将原语类型int转换为您定义的类型int32

请发一封信@πάνταῥεῖ 我想那就足够了。。你想让我发布int32源代码的全部内容吗?如果不知道int32是什么,没有人能说出问题的真正原因。@JosephCaruso,i32类的全部内容是不必要的。你必须显示足够的代码来说明为什么你认为它应该工作。重载转换运算符到int类型。请发布一个@πάνταῥεῖ 我想那就足够了。。你想让我发布int32源代码的全部内容吗?如果不知道int32是什么,没有人能说出问题的真正原因。@JosephCaruso,i32类的全部内容是不必要的。你必须显示足够的代码来说明为什么你认为它应该工作。重载转换运算符到int类型。这完美地描述了我试图实现的目标!谢谢。这完美地描述了我想要达到的目标!谢谢