2017-06-17 57 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

这很刺激!我不知道为什么,但我感到兴奋。 –

相关问题