another question에서 보았습니다. 클래스 정의 또는 인라인 함수에서 ODR 위반을 일으킬 수 있으므로 헤더 파일을 통해 익명 네임 스페이스의 개체 나 함수를 사용할 수 없다는 것을 깨달았습니다. 이 경우, 또는 constexpr
static
객체를 inline
함수 또는 클래스에 안전하게 사용할 수 있습니까? 예를 들어, CONSTANT
이 namespace
아래에 있으면 안전하지 않을 수 있지만 정적 연결이있는 상수를 사용해도됩니까?ODR 규정 준수 헤더 파일에 상수를 사용합니다.
// some header file to be included by multiple .cpp files
static const/*expr*/ int CONSTANT = 2;
inline int f() {
return CONSTANT;
}
class Cls {
int mem = CONSTANT;
};
적어도 C++ 17에서는 더 이상 문제가되지 않습니다. 이상하게도 타입 별칭이 문제를 해결할 수 있습니다 :'CONSTANT = std :: integral_constant; –
Barry
@MM의 인용문에서 "객체가 odr-used가 아닙니다"라는 것을 배워라. –
N4606 (isocpp.org에 따른 최신 표준 초안)은 여전히 "객체가 odr-used가 아닙니다" –