‒ 你知道发生了什么事吗?
‒ 您想解释一下吗?
‒ 我可以自己解释......你明白吗?
对不起题词,但是......我有一种我可以解释的感觉,但我不明白(反之亦然......)这里发生了什么:
std::vector<int> v;
v.emplace_back(1);
v.emplace_back({1});
v.emplace_back(int{1});
标准是如何解释这三个表达式的,为什么会有这样奇怪的诊断
emplace_back:函数不接受 1 个参数
在中线?
‒ 你知道发生了什么事吗?
‒ 您想解释一下吗?
‒ 我可以自己解释......你明白吗?
对不起题词,但是......我有一种我可以解释的感觉,但我不明白(反之亦然......)这里发生了什么:
std::vector<int> v;
v.emplace_back(1);
v.emplace_back({1});
v.emplace_back(int{1});
标准是如何解释这三个表达式的,为什么会有这样奇怪的诊断
emplace_back:函数不接受 1 个参数
在中线?
对于这个提案
问题是当使用模板参数时,模板参数的类型不是从花括号参数中推断出来的。并且该函数
emplace_back使用模板参数。来自 C++ 标准(14.8.2.1 Deducing template arguments from a function call)
您可以使用以下类声明示例模拟相同的错误
编译器可能会发出以下诊断消息
如果
emplace_back用非模板方法替换push_back,则相应的调用将编译,因为函数参数的类型从声明的实例化向量的类型中已知,并且是类型int。因此,您将明确需要指定函数模板参数的类型
例如,
或者为了
emplace_back将程序输出到控制台
或@alexolut在评论中建议的示例
关于给定调用中的表达式
那么这里使用显式类型转换,即所谓的函数式表示法。
来自 C++ 标准(5.2.3 显式类型转换(函数符号))