我只是看着Stephan T. Lavavej谈论CppCon 2018"课程模板论证演绎",他在某些时候偶然说:
在C++类型中,信息几乎从不向后流动...... 我不得不说"差不多",因为有一两个案例,可能更多但很少.
尽管试图找出他可能指的是哪些案件,但我无法想出任何建议.因此问题是:
在哪些情况下,C++ 17标准要求类型信息向后传播?
C++ 11 std::map<K,V>类型具有一个emplace函数,许多其他容器也是如此.
std::map<int,std::string> m;
std::string val {"hello"};
m.emplace(1, val);
Run Code Online (Sandbox Code Playgroud)
此代码的工作方式与宣传的一样,std::pair<K,V>直接安排,但它会产生副本key并val发生.
是否可以将值类型直接置于地图中?我们能比调用中的参数更好emplace吗?
这是一个更彻底的例子:
struct Foo
{
Foo(double d, string s) {}
Foo(const Foo&) = delete;
Foo(Foo&&) = delete;
}
map<int,Foo> m;
m.emplace(1, 2.3, string("hello")); // invalid
Run Code Online (Sandbox Code Playgroud)