xem xét mã này:Đây có phải là std :: ref behavior logic?
#include <iostream>
#include <functional>
int xx = 7;
template<class T>
void f1(T arg)
{
arg += xx;
}
template<class T>
void f2(T arg)
{
arg = xx;
}
int main()
{
int j;
j=100;
f1(std::ref(j));
std::cout << j << std::endl;
j=100;
f2(std::ref(j));
std::cout << j << std::endl;
}
Khi thực hiện, mã này đầu ra
107
100
tôi dự kiến sẽ có giá trị thứ hai là 7 chứ không phải 100.
tôi đang thiếu gì?
Trình bao bọc tham chiếu có thể lặp lại, do đó, gán các thay đổi được tham chiếu, chứ không phải đối tượng được tham chiếu. –
Câu hỏi hay! – vsoftco