84669 人が学習中
152542 人が学習中
20005 人が学習中
5487 人が学習中
7821 人が学習中
359900 人が学習中
3350 人が学習中
180660 人が学習中
48569 人が学習中
18603 人が学習中
40936 人が学習中
1549 人が学習中
1183 人が学習中
32909 人が学習中
#include <iostream> #include <type_traits> template<typename T>void g(T&& val); int main() { int i = 0; const int ci = i; g(i*ci);//请问这里模板实例化的T是int还是int&&?我认为是int,但很多地方说是int&&,感觉不可思议 }
认证高级PHP讲师
没记错的话T是int,val是int&&。你可以看下effective modern c++第一章
写个程序验证一下不就好了
不好意思,刚刚写错了,下面这个才是正确的验证方案。
输出是10和999我才g()里面想输出val,值是10然后在g()修改了val,再回到main输出999说明这里的参数传的是引用,而不是值传递。也就是说 传的是T&
答案是:非常量右值引用。这个问题就是对左右值理解的问题。
没记错的话T是int,val是int&&。你可以看下effective modern c++第一章
写个程序验证一下不就好了
不好意思,刚刚写错了,下面这个才是正确的验证方案。
输出是10和999
我才g()里面想输出val,值是10
然后在g()修改了val,再回到main输出999
说明这里的参数传的是引用,而不是值传递。
也就是说 传的是T&
答案是:非常量右值引用。
这个问题就是对左右值理解的问题。