有没有大佬懂这啥啊,C++真比法语还难😰
全部评论
原理是因为int&amp;会被隐式转换成float&amp;&amp;,而float&amp;会被隐式转换成int&amp;&amp;。 #include <iostream> using namespace std; void f(int&amp;&amp; ) { cout << "int"; } void f(float&amp;&amp;) { cout << "float"; } void p(int &amp;x) { f(x); } void p(float &amp;x) { f(x); } int main() { float x=1.0; int y=2; p(x); p(y); } 至于为什么会这么转换,我个人认为可能是bug。
15 回复 分享
发布于 2023-06-08 12:21 新加坡
可变参数模板
10 回复 分享
发布于 2023-06-07 23:54 陕西
1. typename... 可变参数模版。2.(f(),...)括号表达式的可变参数应用 3 type&& 右值引用 4. f()函数重载———总之不懂哪个知识点就去针对性看一下吧
7 回复 分享
发布于 2023-06-07 23:54 浙江
f(x) 中的 x 是 lvalue expression,但是实施隐式类型转换会让它变为 rvalue expression【例如 (int) x,这是一个 lvalue 还是 rvalue expression 呢?】,而隐式类型转换不能发生在同类型转换上,因此出现 int 匹配 float,float 匹配 int 的错觉。事实上将 float 改为 double 等也是一样的。代码要将 double 版本注释掉,否则会导致重载歧义,如 int 能隐式转换为 float 或 double。
5 回复 分享
发布于 2023-06-10 18:56 广东
要不先去看本primer
3 回复 分享
发布于 2023-06-08 16:32 四川
你忘了用forward,完美转发he万能引用可以了解下
2 回复 分享
发布于 2023-06-08 15:43 湖北
vs的msvc编译直接报错 devc铁锅
2 回复 分享
发布于 2023-06-08 23:43 浙江
还行吧这个可变参,但是建议再加上完美转发
1 回复 分享
发布于 2023-06-08 14:33 湖南
这简单啊,找规律,int变成float,float变成int
1 回复 分享
发布于 2023-06-10 15:14 河南
前面两个f是同名函数,但参数不同决定了它们是两个函数,然后使用template语法来构造g函数,使得调用这个函数传入的参数类型决定调用哪一个f函数,这就是一个静态多态的表现
点赞 回复 分享
发布于 2023-06-08 11:34 广东
引用折叠,可变模版参数
点赞 回复 分享
发布于 2023-06-10 17:43 江苏
完美转发
点赞 回复 分享
发布于 2023-06-15 23:39 湖南
可变模板参数+右值引用+:不使用的函数参数不写参数名
点赞 回复 分享
发布于 2023-06-22 16:37 广东
不是很懂,继续学习😭
点赞 回复 分享
发布于 2023-06-24 23:44 安徽

相关推荐

点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
10-25 10:12
点赞 评论 收藏
分享
12 49 评论
分享
牛客网
牛客企业服务