C언어 C++ Programming

[C언어/C++]const란? 사용이유(constexpr 비교, int&, 함수 인자)

끄적끄적아무거나 2023. 8. 9. 08:26
반응형

 

목차

     

     

     

     

    [C언어/C++]const란? 사용이유

     

    C++에서 const 키워드는 변수나 함수 매개변수, 멤버 함수 등을 상수화시키는 데 사용됩니다. const를 사용하는 것은 코드의 안정성과 가독성을 높이는 데 도움이 됩니다. 아래는 const를 사용하는 몇 가지 예제와 그에 따른 장점에 대한 설명입니다.

     

     

    const int max_value = 100;

    이 경우 max_value는 변경할 수 없는 상수로 간주되며, 값을 변경하려고 시도하면 컴파일 오류가 발생합니다.

     

     

     

     

    void printValue(const int x) {
        // x를 수정하려고 시도하면 컴파일 오류 발생
        cout << x << endl;
    }

    printValue 함수의 매개변수 x는 읽기 전용으로 취급되며 수정할 수 없습니다. 이렇게 함으로써 함수 내에서 실수로 변수 값을 변경하는 것을 방지할 수 있습니다.

     

     

     

     

    class Circle {
    public:
        double getArea() const {
            // 멤버 변수를 수정하려고 시도하면 컴파일 오류 발생
            return 3.14 * radius * radius;
        }
    
    private:
        double radius;
    };

    getArea 함수의 const 선언은 이 함수가 해당 객체의 멤버 변수를 수정하지 않음을 보장합니다. 이것은 const 객체에서도 호출될 수 있도록 합니다.

     

     

     

     

     

     

    void printValue(const int& x) {
        // x를 수정하려고 시도하면 컴파일 오류 발생
        cout << x << endl;
    }

    const int&와 같이 함수의 인자로 사용되는 경우, 이는 "상수 참조"를 나타냅니다. 이는 함수에 값을 전달하는 것이 아니라 변수의 참조(메모리 주소)를 전달하되, 해당 변수를 수정하지 못하도록 보장하는 방식입니다. 이러한 사용은 함수 호출 시 복사를 피하고 동시에 원본 변수의 내용을 변경하지 않는 것을 가능하게 합니다.

     

    메모리를 복사하는 대신 변수의 메모리 주소를 전달하므로 메모리 사용을 최적화 하는 장점이 있습니다.

     

     

     

     

     

    위와 같은 예제들의 장점으로 const를 사용하게 되는 것입니다. 위의 예제를 적용해서 효율적인 코드를 작성할 수  있습니다. 

     

     

     

     

     

     

     

     

     

     

     

     

     

    [C언어/C++] constexpr이란?

     

    constexpr는 C++11부터 도입된 키워드로, 컴파일 시간에 평가되는 상수 표현식을 나타내기 위해 사용됩니다. constexpr를 사용하면 컴파일러는 해당 표현식을 컴파일 시간에 미리 계산하여 상수로 사용할 수 있습니다. 이는 실행 시간이 아닌 컴파일 시간에 값이 결정되므로 실행 성능을 향상시키고 메모리 사용을 최적화할 수 있습니다.

     

     

    constexpr int factorial(int n) {
        return (n <= 1) ? 1 : n * factorial(n - 1);
    }
    
    int main() {
        constexpr int result = factorial(5); // 컴파일 시간에 값이 계산됨
        return result;
    }

     

     

    위 예제에서 factorial 함수는 constexpr로 선언되어 있으며, factorial(5)는 컴파일 시간에 값을 계산하고 result 변수에 상수로 저장됩니다. 이렇게 하면 실행 시간에 계산을 수행하는 것보다 성능과 메모리 측면에서 이점을 얻을 수 있습니다.

     

    즉, 위 예제에서 factorial이라는 함수의 인자 값을 5로 이미 주고 있기 때문에 compile 단계에서 미리 결과를 처리할 수 있기 때문에 constexpr를 사용해서 컴파일 단계에서 값을 이미 가져와 버립니다. 만일 5라는 값이 결정이 되지 않으면 constexpr를 사용할 수  없습니다.

    반응형