Namespaces
Variants

alignof operator (since C++11)

From cppreference.net
C++ language
General topics
Flow control
Conditional execution statements
Iteration statements (loops)
Jump statements
Functions
Function declaration
Lambda function expression
inline specifier
Dynamic exception specifications ( until C++17* )
noexcept specifier (C++11)
Exceptions
Namespaces
Types
Specifiers
constexpr (C++11)
consteval (C++20)
constinit (C++20)
Storage duration specifiers
Initialization
Expressions
Alternative representations
Literals
Boolean - Integer - Floating-point
Character - String - nullptr (C++11)
User-defined (C++11)
Utilities
Attributes (C++11)
Types
typedef declaration
Type alias declaration (C++11)
Casts
Memory allocation
Classes
Class-specific function properties
Special member functions
Templates
Miscellaneous

타입의 정렬 요구 사항을 조회합니다.

목차

구문

alignof( type-id )

std::size_t 타입의 값을 반환합니다.

설명

정렬 요구사항 을 바이트 단위로 반환합니다. 이는 type-id 로 지정된 타입의 모든 인스턴스에 필요한 값으로, 해당 타입은 완전한 객체 타입, 요소 타입이 완전한 배열 타입, 또는 이러한 타입들 중 하나에 대한 참조 타입 중 하나여야 합니다.

타입이 참조 타입인 경우, 연산자는 참조된 타입의 정렬을 반환합니다; 타입이 배열 타입인 경우, 요소 타입의 정렬 요구사항이 반환됩니다.

참고 사항

alignment 가 반환하는 값의 의미와 속성에 대해서는 alignof 를 참조하십시오.

키워드

alignof

예제

#include <iostream>
struct Foo
{
    int   i;
    float f;
    char  c;
};
// 참고: 아래의 alignas(alignof(long double))는
// 원한다면 alignas(long double)로 단순화할 수 있습니다.
struct alignas(alignof(long double)) Foo2
{
    // 여기에 정의를 넣으세요
}; 
struct Empty {};
struct alignas(64) Empty64 {};
#define SHOW(expr) std::cout << #expr << " = " << (expr) << '\n'
int main()
{
    SHOW(alignof(char));
    SHOW(alignof(int*));
    SHOW(alignof(Foo));
    SHOW(alignof(Foo2));
    SHOW(alignof(Empty));
    SHOW(alignof(Empty64));
}

가능한 출력:

alignof(char) = 1
alignof(int*) = 8
alignof(Foo) = 4
alignof(Foo2) = 16
alignof(Empty) = 1
alignof(Empty64) = 64

결함 보고서

다음의 동작 변경 결함 보고서들은 이전에 발표된 C++ 표준에 소급 적용되었습니다.

DR 적용 대상 게시된 동작 올바른 동작
CWG 1305 C++11 type-id 가 알려지지 않은 경계를 가졌지만 완전한 요소 타입을 가진
배열에 대한 참조를 나타낼 수 없었음
허용됨

참고문헌

  • C++23 표준 (ISO/IEC 14882:2024):
  • 7.6.2.6 Alignof [expr.alignof]
  • C++20 표준 (ISO/IEC 14882:2020):
  • 7.6.2.5 Alignof [expr.alignof]
  • C++17 표준 (ISO/IEC 14882:2017):
  • 8.3.6 Alignof [expr.alignof]
  • C++14 표준(ISO/IEC 14882:2014):
  • 5.3.6 Alignof [expr.alignof]
  • C++11 표준 (ISO/IEC 14882:2011):
  • 5.3.6 Alignof [expr.alignof]

참고 항목

Alignment requirement 객체가 할당될 수 있는 주소를 제한함
alignas (C++11) 변수의 저장 공간이 특정 크기로 정렬되어야 함을 지정함
(지정자)
타입의 정렬 요구사항을 얻음
(클래스 템플릿)
C documentation for _Alignof , alignof operator