I am a bit confused by the following code:
#include
const char* f()
{
const char* arr[]={\"test\"};
return arr[0];
}
int main()
{
No, it's not UB.
This:
const char* f()
{
const char* arr[]={"test"};
return arr[0];
}
Can be rewritten to the equivalent:
const char* f()
{
const char* arr0 = "test";
return arr0;
}
So we're just returning a local pointer, to a string literal. String literals have static storage duration, nothing dangles. The function really is the same as:
const char* f()
{
return "test";
}
If you did something like this:
const char* f() {
const char arr[] = "test"; // local array of char, not array of char const*
return arr;
}
Now that is UB - we're returning a dangling pointer.