【发布时间】:2014-08-12 22:32:31
【问题描述】:
我正在试验受 Scott Meyers article on the subject 启发的通用引用。
所以我尝试了以下方法:
#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 会使程序根本不输出任何内容。我想我应该很高兴没有切斯特菲尔德沙发或鲸鱼。
【问题讨论】:
-
通用行为。抱歉,我的意思是未定义的行为。
-
@CaptainGiraffe, Can a local variable's memory be accessed outside its scope?(剧透:答案是否定的)
-
正如我妻子常说的,“悬空引用”...