Tôi có đoạn mã sau:Làm thế nào để vượt qua một tham chiếu thông qua một gói tham số?
#include <cstdio>
template<class Fun, class... Args>
void foo(Fun f, Args... args)
{
f(args...);
}
int main()
{
int a = 2;
int b = 1000;
foo([](int &b, int a){ b = a; }, b, a);
std::printf("%d\n", b);
}
Hiện nay nó in 1000
, có nghĩa là, giá trị mới của b
bị mất ở đâu đó. Tôi đoán đó là vì foo
chuyển các tham số trong gói thông số theo giá trị. Lam sao tôi co thể sửa no?
này sẽ thất bại nếu 'a' là một rvalue, mặc dù rằng nên ngữ nghĩa cho phép. '&&' sẽ tốt hơn tôi nghĩ. – ildjarn
@ildjarn bạn nói đúng. sửa mã số –
Hoàn toàn phù hợp với nhu cầu của tôi nếu '&&' được sử dụng. – p12