one-definition-rule

    0

    1답변

    템플릿 템플릿이 아닌 경우 헤더와 소스 파일의 코드를 구분하는 것이 좋습니다. 누군가 이해해 주시겠습니까? 유일한 코드 스타일입니까, 아니면이 방법으로 가능한 오류 (예 : 링커 오류)를 피할 수 있습니까? 템플릿 클래스의 경우 우리는 분리를 허용하지 않기 때문에 궁금합니다. 미리 감사드립니다.

    2

    1답변

    another question에서 보았습니다. 클래스 정의 또는 인라인 함수에서 ODR 위반을 일으킬 수 있으므로 헤더 파일을 통해 익명 네임 스페이스의 개체 나 함수를 사용할 수 없다는 것을 깨달았습니다. 이 경우, 또는 constexprstatic 객체를 inline 함수 또는 클래스에 안전하게 사용할 수 있습니까? 예를 들어, CONSTANT이 nam

    3

    1답변

    inline 함수는 하나의 정의 규칙을 약화시키는 것을 제공합니다. 몇 가지 제한이 있지만 여러 정의가 허용됩니다. 온라인에서 찾은 문구 하나는 입니다. 각 정의는 동일해야하며 동일한 토큰으로 구성되어야하며 동일한 항목을 참조해야합니다. 비록 그것이 확실한 지 모르지만. 나는 또한 그것이 얼마나 엄격한 지 잘 모르겠습니다. 내가 하나가 C++ 03, C++

    2

    2답변

    __DATE__ 또는 __TIME__을 헤더 파일에 사용하면 해당 헤더 포함에 대한 전처리 기 결과가 다소 다를 수 있습니다. 헤더 파일의 __DATE__ 또는 __TIME__을 사용하면 one-definition-rule을 위반하는 상황이 있습니까? 후속 조치 : assert 헤더가 one-definition-rule을 위반합니까?

    1

    1답변

    정적 인 (constexpr) 멤버의 연결에 대한 많은 질문이 있습니다. 하지만 템플릿 클래스를 아웃 오브 라인 정의로 사용하는 것이 헤더 파일에서 작동하지만 특수 클래스에서는 작동하지 않는 이유가 궁금합니다. 이 링커 오류없이 작동하는) : template<typename, typename> struct Foobar; template<typename

    5

    1답변

    C++에서 변수를 여러 번 선언하면 컴파일하는 동안 오류가 표시됩니다. 예 : int x; int x; 함수를 여러 번 선언해도 컴파일하는 동안 오류가 표시되지 않습니다. 예를 들면 다음과 같습니다. int add(int, int); int add(int, int); C++에서 이러한 차이점은 무엇입니까?

    8

    2답변

    DR 712은 현재 C++ 11의 [basic.def.odr]/2의 문구가 현재의 표현 인 [basic.def.odr]2 and 3으로 변경되었습니다. 재해 복구에 명시된 바와 같이 다음과 같이하지만 난 여전히, 변화에 대한 이유를 이해하려고 노력 중이 야 : "사용" (712)는 조건부 표현의 정수 상수 피연산자가 있습니까 클래스 정의 내에서 초기화 된

    2

    2답변

    libplugin이라는 공유 라이브러리가 있다고 가정 해 보겠습니다. class Plugin { public: virtual void doStuff(); }; 는의도 libspecialplugin라는 이름의 또 다른 공유 라이브러리가 있다고 가정하자 :이 공유 라이브러리에서 클래스가있다. 그것은 다음과 같은 클래스와 기능이 포함되

    3

    3답변

    이 클래스 내에서 멤버 변수/typedef가 아닌 자유로운 특성을 갖는 이유는 무엇입니까? 후자는 ODR 위반을 일으킬 위험이 훨씬 적습니다. 특성 tuple_size을 사용하는 것이 클래스 내에서이 인라인을 정의하는 것보다 낫다는 구체적인 사용 사례가 있습니까? iterator_traits (https://stackoverflow.com/a/6742025

    7

    1답변

    템플릿 함수는 클래스 내부에 정의 된 멤버 함수처럼 링크 할 때 기본적으로 인라인 인 여러 정의가 적용되지 않습니다. 또한 constexpr 개체는 내부 연결을 가지고 있지만 템플릿 변수는 외부 연결을가집니다 (두 경우 모두 네임 스페이스 범위와 C++ 14를 의미합니다). 약 어떨까요? template<class T> constexpr T i_am_od