趕快加入我們來參與討論吧!
您需要 登錄 才可以下載或查看,沒有帳號?加入我們
x
在C++中,除了語法規定的範圍以外,有許多的模糊空間,如下例
[C++] 純文本查看 復制代碼 #include<iostream>
#include<climits>
using namespace std;
int main()
{
cout<<INT_MAX+1<<endl;
}
在課程中,我們知道INT_MAX代表int的最大值,我們在此假定為32bit的2147483647,但是INT_MAX+1會變成什麼? 是-2147483648嗎? 這答案是「不一定」。
這就是Undefined behavior,又稱未定義行為。因為在語法規範中,本來就不允許程式設計師發生溢位,理所當然的,也不會因為不小心的「犯規」而多衍伸一個條例。
下面再舉個例子
[C++] 純文本查看 復制代碼 #include<iostream>
#include<climits>
using namespace std;
int main()
{
int a=2,b=3;
a^=b^=a^=b;
cout<<a<<' '<<b<<endl;
}
請大家執行這段程式碼,猜猜看a^=b^=a^=b;,這一行在做什麼,有什麼功用,以及為什麼這是Undefined behavior
相關資料
http://blog.ez2learn.com/2008/09/27/evil-undefined-behavior/
C語言十戒
https://www.ptt.cc/bbs/SFFamily/M.1134111686.A.5F8.html
英文版!?
http://www.lysator.liu.se/c/ten-commandments.html
|