Bil*_*ias 6 c++ initialization curly-braces list-initialization c++17
#include <stdio.h>
#include <vector>
#include <deque>
// 1st function
void f(int i, int j = 10){
printf("Hello World what");
};
void f(std::vector<int>){
printf("Hello World vec");
};
void f(std::deque<int>){
printf("Hello World deq");
};
int main()
{
f({});
return 0;
}
Run Code Online (Sandbox Code Playgroud)
如果第一个函数被注释掉,我会ambiguous call
在编译时得到。如果没有注释掉,则调用第一个函数。为什么{}
隐式转换为int
?
编辑:我想删除这篇文章,因为它是错误的(抱歉,我忘记了向量/双端队列的初始化列表构造函数不是模板)。不幸的是,只要它是公认的答案,我就不能这样做。
std::vector
和 的单参数构造函数std::deque
是显式的。对于空的初始化列表来说,自动类型推导是不可能的,这消除了匹配f(std::vector<int>)
和f(std::deque<int>)
重载的所有方法。
所以构造一个 int 是唯一的匹配。
归档时间: |
|
查看次数: |
77 次 |
最近记录: |