我对以下代码有点困惑:
#include <iostream>
const char* f()
{
const char* arr[]={"test"};
return arr[0];
}
int main()
{
auto x = f();
std::cout << x;
}
我认为这段代码应该是未定义的行为(UB)。我们在本地范围内返回一个指向C风格数组元素的指针。事情应该会出错。然而,我用-Wall -Wextra -pedantic
在g++和clang上测试了所有编译器,没有一个抱怨。 valgrind
也没有抱怨。
上面的代码是有效的还是像人们想象的那样UB?
PS:运行它似乎会产生“正确”的结果,即显示“test”,但这并不表示正确性。