我通过这个简单的演示来再现这个问题:
// bool_test_func.cpp
#include <stdio.h>
void func(bool* b) {
int a = (*b ? 0 : 1);
printf("%d\n", a); // EXPECT ether 0 or 1 here
}
// bool_test.cpp
void func(bool* b);
int main() {
int n = 128;
func((bool*)&n);
return 0;
}
-o0编译并运行:
g++ -g -O0 -Wall -o bool_test bool_test.cpp bool_test_func.cpp
mikewei@maclinux:~/testing/c++$ ./bool_test
0
g++ -g -O1 -Wall -o bool_test bool_test.cpp bool_test_func.cpp
mikewei@maclinux:~/testing/c++$ ./bool_test
129
00000000004005e6 : 4005e6: 48 83 ec 08 sub $0x8,%rsp 4005ea: 0f b6 37 movzbl (%rdi),%esi 4005ed: 83 f6 01 xor $0x1,%esi #just XOR the bool val 4005f0: 40 0f b6 f6 movzbl %sil,%esi 4005f4: bf 94 06 40 00 mov $0x400694,%edi 4005f9: b8 00 00 00 00 mov $0x0,%eax 4005fe: e8 9d fe ff ff callq 4004a0 400603: 48 83 c4 08 add $0x8,%rsp 400607: c3 retq 400608: 0f 1f 84 00 00 00 00 nopl 0x0(%rax,%rax,1) 40060f: 00
我认为这是一个G++的bug。
我不得不恭敬地表示不同意。
如何禁用这种错误的优化?
int a = (*b ? 0 : 1);
但是,由于给出的是128
,异或
结果为129
。
出于某种奇怪的原因..返回,而linux中的命令返回 星期日;星期一;星期二;星期三;星期四;星期五;星期六 任何帮助都将不胜感激,谢谢。
查找表示整数为所需的最小位 为什么为值0返回0,难道不应该返回1吗。因为表示0所需的位数是1。 另外,我认为公式中的是一个偏移量
我得到这个错误时,创建新的贝宝通知与活跃的商人 一个OpenSSL::SSL::SSLError发生在payment_notifications#创建:SSL_connect返回=1 errno=0 state=SSLv3读取服务器证书B:证书验证失败 /home/user/.rbenv/versions/2.0.0-p353/lib/ruby/2.0.0/net/http.rb:918:在'连接
问题内容: 我得到imageView的宽度0。下面是代码。 xml文件: 活动内容: 我不想使用下面的代码,因为我需要将此代码放置在很多地方。 我的解决方法: 实际上,我以后不需要在活动中添加此代码。我将其添加到非活动类中,而不是ImageView的宽度,而是使用了位图图像的宽度,现在没有此问题。 问题答案: 您在哪里打电话并在ImageView上打电话?如果您是在活动中打电话,则无法使用。您需要
问题内容: 我知道有很多标题相同的主题。但是大多数情况是将查询插入了错误的位置。但是我认为我说对了。所以问题是,即使将数据插入数据库,我仍然会得到0。有人知道我可能是错的答案吗? 这是我的代码: 在此先多谢一遍,因为我几乎已经整整一天都为此而努力。(可能有点小而愚蠢) 问题答案: 根据手册 mysql_insert_id返回: 成功执行前一个查询为AUTO_INCREMENT列生成的ID; 如果前
问题内容: 我有这个测试表: 使用这三个插入 并发行 但是查询始终会导致。 PHP ,也没有结果。 我整天都在玩弄,无法正常工作。有想法吗? 问题答案: 问题似乎出在MySQL的phpmyadmin配置文件中,每次发出查询时都会生成新的phpmyadmin配置文件- 因此使其无效。 后续主题中的更多信息每个查询都会创建一个新的CONNECTION_ID() 也感谢dnagirl的帮助