【发布时间】:2014-11-06 21:01:44
【问题描述】:
我的代码中发生了非常奇怪的事情。我相信我已经追踪到标有“这里”的部分(代码当然是简化的):
std::string func() {
char c;
// Do stuff that will assign to c
return "" + c; // Here
}
当我尝试cout 这个函数的结果时会发生各种各样的事情。我想我什至设法获得了一些底层 C++ 文档,以及许多 segmentation fault。我很清楚,这在 C++ 中不起作用(我现在使用stringstream 来转换为string),但我想知道为什么。在使用了很多 C# 并且没有使用 C++ 之后,这给我带来了很多痛苦。
【问题讨论】:
-
数组衰减为指针。
chars 晋升为ints。指针运算随之而来。 -
该代码相当于
const char *str=""; return &(str[(int)c]);。未定义的行为(除非 C 为 0)。 -
您可能对 C++14 感兴趣
sliteral -
“我什至设法获得了一些底层 C++ 文档”,这是 Undefined Behavior 的一个有趣示例。