我试图创建一个向量工厂,该工厂创建具有指定大小1
的{{1}}值的向量,但无法正常工作。
s
由于分配尝试过多,导致出现运行时错误。但是,如果我尝试以这种方式实现它,则它可以正常工作。
template<size_t s>
constexpr std::vector<int>& vector_factory()
{
std::vector<int> v(s, 1);
return v;
}
int main(int argc, char* argv[])
{
constexpr size_t s = 10;
std::vector<int> v1 = vector_factory<s>();
std::vector<int> v2 = vector_factory<s>();
}
我在做什么错?
答案 0 :(得分:9)
运行时错误不是由于尝试大量分配,而是由于两个悬挂的引用。功能签名
constexpr std::vector<int>& vector_factory();
有两个问题。首先,由于std::vector
没有constexpr
构造函数,因此无法编译。其次,必须按值而不是引用返回对象。编译器甚至应就此问题警告您。如果您将以上更改为
std::vector<int> vector_factory() { /* As before... */ }
一切都会按预期进行。