2017-06-17 56 views
0

enter image description here爲什麼int a = 4i;不報告語法錯誤(C++)

#include <iostream> 
using namespace std; 

int main(int argc, const char * argv[]) { 
    int a = 232u; 
    int b = 4i; 
    cout << a << endl << b; 
} 

我是CPP的審查基礎上,由於屏幕截圖我拿了,我試圖簽下一個unsigned int到INT這是罰款,然後我試圖改變你對我並等待一個錯誤,但沒有錯誤,輸出爲0.沒有定義我。所以發生了什麼事。

我在mac上使用xcode,最後一張圖片是構建設置。

+2

你使用什麼開發環境/編譯器?你確定你沒有收到錯誤嗎?我唯一能想到的是IDE由於某種原因執行舊版本的可執行文件。 – grek40

+2

gcc和叮噹聲無repro。你使用什麼編譯器? –

+0

它的蘋果LLVM 8.0(默認在xcode) –

回答

2

C++有一個文字的概念,這是用來描述一個值的類型。例如,integer literal可用於寫我想要一個整數1與類型unsigned int。我們會寫它1u

就你而言,你可能使用的是GNU extension for imaginary constants。你寫的東西不能用C++標準編譯。

在C++標準中使用複雜字面值的好方法是包含包含<complex>。並且要使用std::complex_literals,這隻能在C++ 14中使用。

+0

也許這是對的,雖然我沒有包括手冊。但我嘗試了其他字母p和q,它會報告錯誤。 –

0

後綴i表示複數的虛部;當將(隱含地)構造的複數賦予整數值時,僅取實部。

因此,下面的表達式生成0

int b = 4i; // gives 0; real-part of 4i is 0, imaginary-part is 4: casting to int gives the real part, i.e. 0 

但是:

int x = 4i*4i; // gives -16; as i means the square root of -1, i*i yields -1; so 4i*4i = -16 

請注意,這個工程即使沒有包括<complex>

+0

這很刺激!我不知道爲什麼,但我感到興奮。 –

相關問題