Я немного смущен следующим кодом:
#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
я тестировал, не жаловался (я использовал -Wall -Wextra -pedantic
как на g++, так и на clang). valgrind
тоже не жалуется.
Является ли код выше действительным или это UB, как можно было бы подумать?
PS: работает, кажется, производит "правильный" результат, то есть отображает "тест", но это не указывает на правильность.