int& geta() { int a=20; return a; } int main() { int& a1=geta(); printf("%d\n",a1); printf("%d\n",a1); return 0; } 结果 20 5307168//这个数每次运行结果都不一样
为什么两次的结果不一样?为什么a都不存在了还能通过引用输出一次20,第二次输出结果就成了一个不固定的数???求解答,非常感谢
光阴似箭催人老,日月如移越少年。
兩次的輸出皆是未定義行為(undefined behavior),因為函數的回傳值是局部變數的引用,而局部變數在函數執行結束時就會被銷毀,所以在函數外使用傳回的引用是未定義的。至於第一次輸出為20可能跟編譯器有關,不同的編譯器對於未定義行為的處理方式不同,如果換一個編譯器可能兩次都會輸出隨機數。
兩次的輸出皆是未定義行為(undefined behavior),因為函數的回傳值是局部變數的引用,而局部變數在函數執行結束時就會被銷毀,所以在函數外使用傳回的引用是未定義的。至於第一次輸出為20可能跟編譯器有關,不同的編譯器對於未定義行為的處理方式不同,如果換一個編譯器可能兩次都會輸出隨機數。