使用 auto 之类的东西进行初始化
Using something like auto for initialization
标准库或语言中是否存在某些内容,可以让我避免在以下情况下重复自己? 在一种情况下,我必须复制类型名称。 在另一个中,我复制了左侧。 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()};
这称为复制列表初始化,您可以在此处阅读更多相关信息。如果可能,它使用聚合初始化,或调用相应的非显式构造函数来构造对象。
相关文章:
- 是否可以初始化不可复制类型的成员变量(或基类)
- C++使用整数的压缩数组初始化对象
- C++初始化基类
- 'auto *x = new some_struct{};"是一个未初始化的变量?
- 如果使用返回引用的函数初始化"auto"var,为什么它不声明引用类型?
- 使用 auto 之类的东西进行初始化
- 使用 auto 关键字初始化字符数组
- 没有声明和初始化的类似闭包的函数(即没有'auto f = make_closure();')
- 为什么"auto"在推导返回值时不能接受大括号的初始化列表?
- 为什么 auto 关键字不能与指向函数的指针的初始化列表一起使用?
- 为什么我不能使用带有 auto 的大括号初始化值并将其传递给此函数
- 使用“auto”进行初始化需要复制构造函数
- 声明变量而不初始化变量的最佳实践,因此auto不可用
- 使用auto进行C++11初始化
- 在使用auto时初始化结构会导致VS 2013中的副本
- 使用auto声明变量,并使用原始文字定义的行为进行初始化
- ' auto x = type{…} '初始化语法和'显式'转换操作符- clang vs gcc
- 当在多个声明中使用auto时,为什么需要为所有变量设置初始化器呢?
- c++ 11/ c++ 14中的auto和大括号初始化
- 何时允许编译器优化auto+大括号样式的初始化