<int> 具有初始化的矢量工厂不起作用

Vector<int> factory with initialization is not working

本文关键字:工厂 不起作用 lt int gt 初始化      更新时间:2023-10-16

我尝试创建一个向量工厂,该工厂创建指定大小s1值,但无法正常工作。

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>();
}

由于大量分配尝试,我遇到了运行时错误。但是,如果我尝试这样实现它,则可以正常工作。

constexpr size_t s = 10;
std::vector<int> v1(s, 1);
std::vector<int> v2(s, 1);

我在做什么错?

运行时错误不是由于分配大量尝试,而是由于两个悬空引用。功能签名

constexpr std::vector<int>& vector_factory();

有两个问题。首先,由于std::vector没有constexpr构造函数,因此无法编译。其次,您必须按值而不是参考返回对象。编译器甚至应该警告您这个问题。如果将上述更改为

std::vector<int> vector_factory() { /* As before... */ }

一切都应该按预期工作。