问题描述
以下代码导致非常奇怪的行为。
#include <iostream>
#include <string>
class A
{
std::string x = "";
std::string y = "a";
bool b; // Uninitialized!
public:
void test()
{
std::cout << y + (b ? "b" : "") << std::endl;
}
};
int main(int argc,const char * argv[]) {
A a;
a.test();
return 0;
}
实际上不是在输出“ ab”或仅是“ a”,而是回声:
ab $\321XQ\300\<\246
\\300\324< \340\353
=X |
在发现它的原因是未初始化的变量b
之后,我仍然很好奇为什么会发生这种情况(并且仅在macOS的clang版本中)。
编辑:进一步简化了示例。
- 如果我删除
A::x
,它将回显a
。 - 如果我将其更改为
y + (b ? "b" : "c")
,它将回显ab
- 如果未最后声明
A::b
,它将回显a
。
编辑2:
我想这篇文章更多的是一个“ TIL:有UB”,然后是一个实际的问题。 如果您也是来这里学习的,那么这段视频可能对您很有趣:
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)