[C++] C++ 스타일 문법

2024. 1. 28. 11:12·Programming Language(Sub)/C++

C++ 스타일 문법


C++ 스타일 초기화

void EX1(void) {
    // int a = 10;  // 초기화, a = 10 : 대입, int a : 선언
    int a(10);  // c++ 스타일 초기화
    // a(5)는 불가능(함수인지, 변수인지 알 수 없다)
    int b(a);
    cout << "a = " << a << " b = " << b << endl;
}

범위 기반 for문

// 범위 기반 for문
void EX2(void) {
    int arr[10] = {3, 1, 4, 1, 5, 9, 2, 6, 5, 3};
    // 배열의 각 칸을 변수처럼 사용하자.
    for (int n : arr) {  // arr안에 있는 모든 값을 n으로 놓고 쓰겠다.
        cout << n << endl;
        n++;  // arr을 루프마다 다시 받아서 의미가 없음.
    }
}
  • n++; 을 해도 arr 배열 각 원소의 값은 변하지 않는다

    • for 문을 돌면서 n의 값이 arr에 복사되는 것이고, n의 값이 증가한다 해서 arr의 값이 증가하는게 아님
  • l-value와 r-value(C11 이후)

    • 직관적으로 등호의 왼쪽에 있으면 l-value, 등호의 오른쪽에 있으면 r-value

    • l-value : 메모리 위치를 참조하는 식 (표현식 이후에도 사라지지 않는 이름을 갖는 변수)

      • int a = 3 에서 a에 해당

      • 주로 변수, 함수, 클래스를 나타내는 식별자를 의미

    • r-value : 표현식 이후에는 사라지는 값. 임시 값

      int val = 20;
      val = 777 + val;
      • line 1 에서 l-value인 val 변수가 가리키는 메모리에 r-value 20(임시값)을 저장한다

      • line 2에서 l-value인 val 변수가 가리키는 메모리에 r-value 777+val(임시 값)을 저장한다

      std::cout << add(a, b) << '\n';
      • add(a, b)가 r-value
    • 모든 l-value는 r-value 이지만, r-value는 l-value가 아닐 수 있다

참조자(레퍼런스 변수)

  • 위의 l-value와 r-value 개념을 이용하여 참조자를 만들 수 있다.

  • & 를 이용하면 l-value 참조자를 만들 수 있다.

  • && 를 이용하면 r-value 참조자를 만들 수 있다.

    void EX4(void) {
        // r-value : 수정할 수 없는 값(숫자 : 3)
        int a(5);
        int &r1 = a; // r1은 l-value 참조자
        // int &r2= 3; --> 불가능 (l-value 참조자가 r-value를 참조하므로)
        // int &r3 = a * a; ---> 불가능 (l-value 참조자가 r-value를 참조하므로)
        int &&r2 = 3; // r2는 r-value 참조자
        int &&r3 = a * a;  // 함수의 return값도 수정할 수 없는 값이므로 참조 가능.
        cout << a << endl;
        cout << r1 << endl;
    }
    • r1은 l-value 참조자로서, 변수 a(l-value)를 참조하고 있다

      • r1은 l-value 참조자이므로, a의 메모리 위치를 참조한다.
    • r2, r3는 r-value 참조자로서, 각각 r-value인 3과 a*a를 참조하고 있다

    int function() {
        return int;
    }
    
    int&& ref = function();
    • 이런 식으로도 R-value 참조자를 만들 수 있다

참조) 두들낙서 C/C++ 강좌

참조) L value & R value - 둘 간의 차이점 :: 껍데기방

'Programming Language(Sub) > C++' 카테고리의 다른 글

[C++] 상수형 매개변수와 상수형 메서드  (0) 2024.02.04
[C++] 클래스(Class) (2) - 정적 멤버, 정적 메서드  (0) 2024.01.30
[C++] 클래스(Class) (1)  (0) 2024.01.30
[C++] 네임스페이스(namespace)  (0) 2024.01.30
[C++] C++ 스타일 함수  (0) 2024.01.29
'Programming Language(Sub)/C++' 카테고리의 다른 글
  • [C++] 클래스(Class) (2) - 정적 멤버, 정적 메서드
  • [C++] 클래스(Class) (1)
  • [C++] 네임스페이스(namespace)
  • [C++] C++ 스타일 함수
lumana
lumana
배움을 나누는 공간 https://github.com/bebeis
  • lumana
    Brute force Study
    lumana
  • 전체
    오늘
    어제
    • 분류 전체보기 (457)
      • Software Development (27)
        • Performance (0)
        • TroubleShooting (1)
        • Refactoring (0)
        • Test (8)
        • Code Style, Convetion (0)
        • DDD (0)
        • Software Engineering (18)
      • Java (71)
        • Basic (5)
        • Core (21)
        • Collection (7)
        • 멀티스레드&동시성 (13)
        • IO, Network (8)
        • Reflection, Annotation (3)
        • Modern Java(8~) (12)
        • JVM (2)
      • Spring (53)
        • Framework (12)
        • MVC (23)
        • Transaction (3)
        • AOP (11)
        • Boot (0)
        • AI (0)
      • DB Access (1)
        • Jdbc (1)
        • JdbcTemplate (0)
        • JPA (14)
        • Spring Data JPA (0)
        • QueryDSL (0)
      • Computer Science (130)
        • Data Structure (27)
        • OS (14)
        • Database (10)
        • Network (21)
        • 컴퓨터구조 (6)
        • 시스템 프로그래밍 (23)
        • Algorithm (29)
      • HTTP (8)
      • Infra (1)
        • Docker (1)
      • 프로그래밍언어론 (15)
      • Programming Language(Sub) (77)
        • Kotlin (1)
        • Python (25)
        • C++ (51)
        • JavaScript (0)
      • FE (11)
        • HTML (1)
        • CSS (9)
        • React (0)
        • Application (1)
      • Unix_Linux (0)
        • Common (0)
      • PS (13)
        • BOJ (7)
        • Tip (3)
        • 프로그래머스 (0)
        • CodeForce (0)
      • Book Review (4)
        • Clean Code (4)
      • Math (3)
        • Linear Algebra (3)
      • AI (7)
        • DL (0)
        • ML (0)
        • DA (0)
        • Concepts (7)
      • 프리코스 (4)
      • Project Review (6)
      • LegacyPosts (11)
      • 모니터 (0)
      • Diary (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
lumana
[C++] C++ 스타일 문법
상단으로

티스토리툴바