简体   繁体   中英

why int a= 4i; not report an syntax error(c++)

在此处输入图片说明

#include <iostream>
using namespace std;

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

I was review basic of cpp, As the screen shot I took, I tried to sign an unsigned int to a int which was fine, then I tried change that u to i and waiting for a error, but there's no error and output was 0. There's no define of i. So what happened.

I'm using xcode on mac, last picture is the build settings.

C++ has a concept of literals, this is used to describe the type of a value. For example, integer literal can be used to write I want a integer 1 with a type unsigned int . We will write it 1u .

In your case, your are probably using a GNU extension for imaginary constants . What you write don't compile in C++ standard.

The good way to use complex literal in C++ standard is to include include <complex> . And to use std::complex_literals , this is only possible in C++14.

The suffix i denotes the imaginary part of a complex number; when assigning an (implicitly) constructed complex number to integral value, only the real part is taken.

Hence, the following expression yields 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

But:

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

Note that this works even without including <complex> .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM