struct vec2{float x,y;};
这会起作用:
vec2* window(float h, float w)
{
vec2 ret[4] = {{w,h},{1-w,h},{1-w,1-h},{w,1-h}};
return ret;
}
但这不会:
vec2* window(float h, float w)
{
return {{w,h},{1-w,h},{1-w,1-h},{w,1-h}};
}
我猜错误是因为后者没有指定数组的大小,但我不知道我是否遗漏了什么......
我也试过:
return vec2[4]({{w,h},{1-w,h},{1-w,1-h},{w,1-h}});
最佳答案
This will work:
不,不会。您正在返回指向本地数组的指针。指针立即失效。
指针不是数组。这也是您的初始化失败的原因之一:编译器实际上无法知道这一点:
vec2* ptr = {{w,h},{1-w,h},{1-w,1-h},{w,1-h}};
应该是这样的:
vec2 ret[4] = {{w,h},{1-w,h},{1-w,1-h},{w,1-h}};
vec2* ptr = ret;
后者的初始化之所以有效,是因为编译器知道它是一个 vec2[4]
你正在初始化。
您应该完全重新考虑这一点,可能会返回 std::array<vec2, 4>
.按值(value)。
关于c++ - 我不能直接在 C++ 中返回列表初始化吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29013688/