让bool方法返回其他整数
Let a bool method return other integer
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);;
}
};
相关文章:
- 在执行其他功能的同时播放动画(LED矩阵和Arduino/ESP8266)
- 如何反转整数参数包
- enum是C++中的宏变量还是整数变量
- 努力将整数转换为链表。不知道我在这里做错了什么
- 让bool方法返回其他整数
- 当我尝试将范围值存储为 8 位的固定宽度整数时,它向我显示一些其他值 [ASCII]
- C++ 在方程中使用变量;错误:表达式必须具有整数或无作用域枚举类型及其他
- 将 64 位整数中的每个其他位与 32 位整数进行比较
- 如何对 int 变量应用验证,使其仅接受整数数据,并且在任何其他数据的情况下不会出错?
- C++模板专用化 - 将其他整数类型委托给uint64_t
- 整数溢出是否会影响其他变量
- 从其他两个文件中创建一个分类整数的文件
- 如何仅接受整数并忽略其他数据类型
- 编译器是否有可能检测整数溢出或其他数据类型溢出的可能性
- 如何检查输入是否是没有任何其他字符的有效整数
- 如何让 VS2013 停止生成对整数类型之间强制转换的__dtol3、__dtoui3和其他函数的调用
- 使用整数常量0初始化实例,但不使用其他常数值或整数变量
- 如果打印后输入整数,则C++分段故障,但其他情况下可以
- 是否存在一个c++函数(内置或其他),可以在不重复操作的情况下给出整数除法和模除法的结果
- Ifstream不会读取整数或其他任何东西