e**t 发帖数: 83 | 1 今天看到Accelerated C++里的一小段程序,有困惑
// separate passing and failing student records: first try
vector extract_fails(vector& students)
{
vector pass, fail;
for (vector::size_type i = 0;
i != students.size(); ++i)
if (fgrade(students[i]))
fail.push_back(students[i]);
else
pass.push_back(students[i]);
students = pass; // 我的疑问在这里
return fail;
}
vector pass是创建在stack里,应该在function结束就被destroy |
S*****n 发帖数: 227 | 2
assignment operator语义上做的是赋值,pass destroyed了,students正好
有了新内容啊。。
【在 e**t 的大作中提到】 : 今天看到Accelerated C++里的一小段程序,有困惑 : // separate passing and failing student records: first try : vector extract_fails(vector& students) : { : vector pass, fail; : for (vector::size_type i = 0; : i != students.size(); ++i) : if (fgrade(students[i])) : fail.push_back(students[i]); : else
|
D*******a 发帖数: 3688 | 3 students是reference而不是指针
students.operator=(pass)已经把内容复制到students了
【在 e**t 的大作中提到】 : 今天看到Accelerated C++里的一小段程序,有困惑 : // separate passing and failing student records: first try : vector extract_fails(vector& students) : { : vector pass, fail; : for (vector::size_type i = 0; : i != students.size(); ++i) : if (fgrade(students[i])) : fail.push_back(students[i]); : else
|
k****z 发帖数: 550 | 4 before the function returns, the line "students = pass;" copies everything
in pass vector to the students vector, which is a reference so that the
original argument gets overwritten.
【在 e**t 的大作中提到】 : 今天看到Accelerated C++里的一小段程序,有困惑 : // separate passing and failing student records: first try : vector extract_fails(vector& students) : { : vector pass, fail; : for (vector::size_type i = 0; : i != students.size(); ++i) : if (fgrade(students[i])) : fail.push_back(students[i]); : else
|
d*******n 发帖数: 1339 | 5 students = pass; // this is a copy in vector, not a reference
【在 e**t 的大作中提到】 : 今天看到Accelerated C++里的一小段程序,有困惑 : // separate passing and failing student records: first try : vector extract_fails(vector& students) : { : vector pass, fail; : for (vector::size_type i = 0; : i != students.size(); ++i) : if (fgrade(students[i])) : fail.push_back(students[i]); : else
|
i*c 发帖数: 1132 | 6 pass在最后一个 "}" 前还没有被destroied, copy to student是有效的.
【在 e**t 的大作中提到】 : 今天看到Accelerated C++里的一小段程序,有困惑 : // separate passing and failing student records: first try : vector extract_fails(vector& students) : { : vector pass, fail; : for (vector::size_type i = 0; : i != students.size(); ++i) : if (fgrade(students[i])) : fail.push_back(students[i]); : else
|