수색…


const

형식 지정자. 형식에 적용되면 형식의 const 한정 버전이 생성됩니다. 참조 CONST 키워드 의 의미에 대한 자세한 내용 const .

const int x = 123;
x = 456;    // error
int& r = x; // error

struct S {
    void f();
    void g() const;
};
const S s;
s.f(); // error
s.g(); // OK

선언 형

C ++ 11

피연산자의 유형을 나타냅니다. 피연산자는 평가되지 않습니다.

  • 피연산자의 경우 e 이름이 추가 괄호없이, 다음 decltype(e)선언 된 유형입니다 e .

    int x = 42;
    std::vector<decltype(x)> v(100, x); // v is a vector<int>
    
  • 피연산자 e 가 추가 괄호없이 클래스 멤버 액세스 인 경우 decltype(e) 는 액세스 된 멤버의 선언 된 유형 입니다.

    struct S {
        int x = 42;
    };
    const S s;
    decltype(s.x) y; // y has type int, even though s.x is const
    
  • 다른 모든 경우 decltype(e) 는 다음과 같이 표현식 e 의 유형 및 값 카테고리 를 산출합니다.

    • eT 형의 lvalue 인 경우, decltype(e)T& 입니다.
    • e 가 유형 T 의 x 값인 경우 decltype(e)T&& 입니다.
    • eT 타입의 prvalue 인 경우, decltype(e)T 입니다.

    여기에는 외부 괄호가있는 경우도 포함됩니다.

    int f() { return 42; }
    int& g() { static int x = 42; return x; }
    int x = 42;
    decltype(f()) a = f(); // a has type int
    decltype(g()) b = g(); // b has type int&
    decltype((x)) c = x;   // c has type int&, since x is an lvalue
    
C ++ 14

특수한 형태의 decltype(auto)auto 대신 decltype 의 형식 공제 규칙을 사용하여 정의의 return 문에서 변수의 형식을 이니셜 라이저 또는 함수의 return 형식에서 추론합니다.

const int x = 123;
auto y = x;           // y has type int
decltype(auto) z = x; // z has type const int, the declared type of x

서명 한

특정 정수 유형 이름의 일부인 키워드.

  • 단독으로 사용되면 int 가 암시되므로 signed , signed intint 는 같은 유형입니다.
  • char 와 결합 할 때 char 이 서명 된 경우에도 char 과 다른 유형인 signed char 유형을 산출합니다. signed char 는 -127에서 +127까지의 범위를 포함합니다.
  • short , long 또는 long long 과 결합 할 때 이미 중복 된 유형이므로 중복됩니다.
  • signedbool , wchar_t , char16_t 또는 char32_t 와 결합 할 수 없습니다.

예:

signed char celsius_temperature;
std::cin >> celsius_temperature;
if (celsius_temperature < -35) {
    std::cout << "cold day, eh?\n";
}

서명되지 않은

정수 형식의 부호없는 버전을 요청하는 형식 지정자입니다.

  • 단독으로 사용되면 int 가 암시되므로 unsignedunsigned int 와 동일한 유형입니다.
  • 유형 unsigned char 유형의 다른 char 경우에도 char 부호이다. 적어도 255까지의 정수를 저장할 수 있습니다.
  • unsignedshort , long 또는 long long 과 결합 될 수도 있습니다. bool , wchar_t , char16_t 또는 char32_t 와 결합 될 수 없습니다.

예:

char invert_case_table[256] = { ..., 'a', 'b', 'c', ..., 'A', 'B', 'C', ... };
char invert_case(char c) {
    unsigned char index = c;
    return invert_case_table[index];
    // note: returning invert_case_table[c] directly does the
    // wrong thing on implementations where char is a signed type
}

휘발성 물질

유형 한정자. 형식에 적용되면 형식의 휘발성 버전이 생성됩니다. 휘발성 자격은 유형 시스템에서 const 자격과 동일한 역할을하지만 volatile 인해 객체가 수정되지 않습니다. 대신, 컴파일러는 부작용과 같은 오브젝트에 대한 모든 액세스를 처리하도록합니다.

아래 예제에서 memory_mapped_port 가 volatile이 아닌 경우 컴파일러는 sizeof(int) 가 1보다 큰 경우 올바르지 않은 마지막 쓰기 만 수행하도록 함수를 최적화 할 수 있습니다. volatile 자격으로 인해 모든 sizeof(int) 는 다른 부작용으로 작성하고 따라서 모두 수행합니다 (순서대로).

extern volatile char memory_mapped_port;
void write_to_device(int x) {
    const char* p = reinterpret_cast<const char*>(&x);
    for (int i = 0; i < sizeof(int); i++) {
        memory_mapped_port = p[i];
    }
}


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow