使用 auto 之类的东西进行初始化

Using something like auto for initialization

本文关键字:初始化 auto 使用      更新时间:2023-10-16

标准库或语言中是否存在某些内容,可以让我避免在以下情况下重复自己? 在一种情况下,我必须复制类型名称。 在另一个中,我复制了左侧。 auto在执行初始化时非常有用,但是赋值没有如此优雅的解决方案。

std::map<std::string, std::string> howdy;
std::vector<std::pair<std::string, std::string>> there;
howdy = std::map<std::string, std::string>{there.begin(), there.end())};
howdy = decltype(howdy){there.begin(), there.end())};

像这样的东西可以解决问题,但我想知道是否已经存在某些东西。

template<typename T, typename... Args>
void assign(T& t, Args&&... args)
{
    t = T{std::forward<Args>(args)...};
}
int main(int, char**)
{
    std::map<std::string, std::string> howdy;
    std::vector<std::pair<std::string, std::string>> there;
    assign(howdy, there.begin(), there.end());
}

只需删除类型! :)

howdy = {there.begin(), there.end()};

这称为复制列表初始化,您可以在此处阅读更多相关信息。如果可能,它使用聚合初始化,或调用相应的非显式构造函数来构造对象。