수색…
소개
인라인 변수는 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