我正在试验受Scott Meyers 关于该主题的文章启发的通用参考。
所以我尝试了以下方法:
#include <iostream>
#include <cassert>
template<typename T>
T& f(T&& var){
std::cout<< &var << std::endl;
return var;
}
int main() {
int& j = f(10);
std::cout<< &j << ", " << j << std::endl;
int& k = f(20);
std::cout<< &k << ", " << k << std::endl;
if( &j == &k ){
std::cout<< "This is peculiar." <<std::endl;
}
return 0;
}
输出:
0x7ffff8b957ac
0x7ffff8b957ac, 10
0x7ffff8b957ac
0x7ffff8b957ac, 20
This is peculiar.
我的印象是&j == &k
可以保证j==k
。
这里发生了什么?
编辑,发布答案:
轶事反思:在第二次打印输出中输出 j 而不是 k 会使程序根本不输出任何内容。我想我应该很高兴没有切斯特菲尔德沙发或鲸鱼。