수색…


소개

인라인 변수는 One Definition Rule 을 위반하지 않고 여러 번역 단위에서 정의 할 수 있습니다. 다중 정의되면 링커는 모든 정의를 최종 프로그램의 단일 개체로 병합합니다.

클래스 정의에 정적 데이터 멤버 정의

클래스의 정적 데이터 멤버가 inline 으로 선언 된 경우 클래스 정의 내에서 완전히 정의 될 수 있습니다. 예를 들어, 다음 클래스가 헤더에 정의 될 수 있습니다. C ++ 17 이전에는 Foo::num_instances 의 정의를 포함하는 .cpp 파일을 제공하여 한 번만 정의 할 수 있었지만 C ++에서는 인라인 변수 Foo::num_instances 의 여러 정의가 필요했습니다. Foo::num_instances 모두 같은 int 객체를 참조합니다.

// warning: not thread-safe...
class Foo {
  public:
    Foo() { ++num_instances; }
    ~Foo() { --num_instances; }
    inline static int num_instances = 0;
};

특별한 경우로, constexpr 정적 데이터 멤버는 암시 적으로 인라인입니다.

class MyString {
  public:
    MyString() { /* ... */ }
    // ...
    static constexpr int max_size = INT_MAX / 2;
};
// in C++14, this definition was required in a single translation unit:
// constexpr int MyString::max_size;


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