让bool方法返回其他整数


class I {
public:
virtual bool F() = 0;
};
class A :public I {
public:
virtual bool F() {
int i = 2;
return i;
}
};
void test() {   
A a;
int i=a.F();
std::cout << i;
}

类I是一个不容易更改的协议。

想要传递比true/false更多的信息,所以想要在C++中使用bool的uint8_t属性。

但编译器(VS2019/VS2017(在返回之前,在布尔方法的末尾添加了将整数转换为0或1的指令。呼叫方没有对话(只有movzx-eax,al指令(,这很好。

在bool方法的末尾是否有一个类似编译标志的方法或一些嵌入的程序集代码,让bool方法返回0/1以外的整数?

简单的免责声明是,这个答案对生产使用毫无好处。它使用了一种通常未定义的行为。

您可以使用reinterpret_cast将返回值转换为布尔值,而无需实际触发bool构造函数(因此不会将实际值更改为0/1(。

class A :public I {
public:
virtual bool F() {
int i = 2;
return *reinterpret_cast<bool *>(&i);;
}
};

最新更新