그냥 게임개발자

암시적 형변환 본문

내 개인적인 공부/알고리즘

암시적 형변환

sudoju 2024. 4. 4. 23:11

예를 들어 int / float를 계산하게되면 어떤 타입으로 변환이 되어 나올까?

바로 float다.

 

이렇게 타입이 변환이 되는 것을 암시적 형변환이라고 하는데

우선순위는 아래와 같다.

1 long double
2 double
3 float
4 unsigned long long
5 long long
6 unsinged long
7 long 
8 unsigned int
9 int(lowest)

 

이 때문에 vector의 size()를 기반으로 음수가 나올 수 있는 연산을 할 때 주의해야 한다.

vector의 size()라는 메서드는 unsgined int를 반환한다.

예를 들어 v.size()값이 8이면

v.size() - 10 이렇게 연산을 할 때 결과값은 음수가 나와야 하지만 unsigned int와 int와의 연산이기에

unsigned int가나와서 아주 큰 양수가 나올 수도 있다.

조심해야 한다.

 

그렇다면 최대한 방지는 이렇다.

#include <iostream>
#include <vector>

using namespace std;

int main()
{
    vector<int> a = {1, 2, 3};
    cout << a.size() - 10 << '\n';
    return 0;
}

조심해야 한다.

 

그리고 또한 타입변환시 주의해야 할 점이 또 있다.

int a = (int) p * 100

int a = (int) 100 * p

 

위 두개의 코드는 1번코드만 타입변환이 된다. 순서에 주의해야 한다.

내가 생각하기로는 p라는 변수가 int가 아닌 변수이기에 형변환이 되어서 타입변환이 된게 아닐까생각한다.

왜냐하면 100이라는 정수는 이미 int이기 때문이다.

 

끄읕