指定类对象的"return type"
Specify "return type" for class object
我有下面的类,它应该代表一个8位有符号字符。
class S8
{
private:
signed char val;
public:
S8 & operator=(const signed char other)
{
if ((void*)this != (void*)&other)
{
val = other;
}
return *this;
}
operator signed char() {signed char i; i = (signed char) val; return i;}
void write (OutputArray & w)
{
/* This function is the whole purpose of this class, but not this question */
}
};
然而,当我将一个负数赋值给它的一个对象时,
S8 s;
char c;
s = -4;
c = -4;
printf("Results: %d, %sn",s,c);
我得到"结果:252,-4"从打印。有没有办法修改类,这样的情况下,会看到一个有符号字符的行为,而不是我得到的无符号字符的行为?
谢谢!
你想要的是从有符号char到S8对象的隐式转换;这是通过非默认复制构造函数完成的。如果定义了带符号char的复制构造函数,那么编译器将使用它进行隐式转换(假设复制构造函数没有定义为"explicit")。所以,对于你的例子:
class S8
{
private:
signed char val;
public:
//default constructor
S8() : val(0) {}
//default copy-constructor
S8(const S8& rhs) : val(rhs.val) {}
//allow implicit conversions (non-default copy constructor)
S8(const signed char rhs) : val(rhs) {}
//allow implicit conversions
operator signed char() { return val; }
};
int main()
{
S8 s;
signed char c;
s = -4;
c = -4;
std::cout << (int) s << std::endl;
std::cout << (int) c << std::endl;
return 0;
}
您的代码根本没有意义,而您所经历的行为完全是任意的,因为不能这样使用printf。(你至少在编译器中打开了警告吗?)很多人会标记你的错误!)
除此之外,你的输入和输出转换器做了你想要的,只是措辞不好。在op= rhs is char中,它不可能在你的类的相同地址上,所以你可以继续存储它。
隐式转换op也不需要麻烦,只返回成员。
为什么你需要这个是不清楚的,可能你应该阅读隐式转换和自定义的op=的东西。由于它具有各种各样的危险,并且只应该由那些清楚地知道何时将应用转换的人使用,客户端代码是这样欢迎转换的,并且客户端代码不太可能在转换存在的情况下陷入困境。
相关文章:
- 无法理解此 return 语句的功能,没有它就会发生运行时错误
- 使用 [] 运算符时"binding reference of type discards qualifiers"
- 在 QVector<std::unique_ptr 上使用 std::find<Type>>
- 在类型和包装器之间reinterpret_cast是否安全<Type>?
- "Missing type specifier - int assumed"无法通过向主函数添加"return 0"来解决
- 按参数类型更改"return type template"
- std::tuple::get return const Type&&
- 在 Ubuntu 14.04 上构建 AWS c++ 配置库时出现"return type is incomplete"错误
- 如何修复空虚拟方法的"warning: no return statement in function returning non-void [-Wreturn-type]"
- 犰狳/ Xcode:无处"functions that differ only in their return type cannot be overloaded"错误
- 控制达到非空隙函数的末端[-werror = return-type](只是一个简单的法官)
- IDL 接口,C++,CORBA,我正在处理"conflicting return type specified for"和"invalid abstract return type for memb
- "Cannot overload functions distinguished by return type alone"是什么意思?
- "Cannot overload functions by return type alone"错误
- 避免重复变量类型:Return type Resolver、C++11 auto、..其他任何东西
- "overloaded function differs only by return type"错误
- 指定类对象的"return type"
- 警告:控制到达非空函数结束[- return-type]
- 在这段代码中,我有一个警告:控制达到非void函数的结束[- return-type].我怎样才能解决这个问题
- 控制到达非空函数结束[-Werror=return-type]