전역 변수 및 constexpr (인라인 여부?)

Lucmobz

내가 가진 경우 : a.hpp a.cpp 및 main.cpp는 a.hpp를 포함하고 a.hpp에서 나는 씁니다

template<typename T>
constexpr int num;
template<>
constexpr int num<float> = 1;
template<>
constexpr int num<double> = 2;

ao와 main.o에서 변수 num을 여러 번 정의 할 위험이 있습니까? 아니면 인라인으로 선언됩니까? a.cpp 안에 템플릿 변수 전문화를 넣어야합니까? a.hpp를 네임 스페이스로 래핑하면 어떻게됩니까?

Evg

numao와 main.o에서 변수를 여러 번 정의 할 위험이 있습니까?

그렇습니다. 템플릿이 아닌 변수의 constexpr경우은 암시 const하고 const네임 스페이스 수준에서는 내부 연결을 의미하지만 변수 템플릿에는 적용되지 않습니다. 이것은 표준에 명시되어 있지 않은 것 같습니다. 현재 초안에는 다음이 있습니다.

참고 1 : 규정 된 const유형 이있는 인스턴스화 된 변수 템플릿은 선언되지 않은 경우에도 외부 또는 모듈 연결을 가질 수 있습니다 extern.

실험적으로 서로 다른 컴파일러는 서로 다른 연결을 제공합니다. 예를 들어 GCC 9.3.0 및 10.2.0 num<float>에는 내부 연결이 있습니다.

nm -C a.o
...
0000000000000004 r num<float>

하지만 Clang 10.0.0에서는 외부 연결이 있습니다.

nm -C a.o
...
0000000000000000 R num<float>

결과적으로 a.hpp두 개의 컴파일 단위 에 포함하려고하면 Clang에서 링크 오류가 발생합니다.


아니면 인라인으로 선언됩니까?

아니요, 명시 적이 inline필요합니다.

a.hpp를 네임 스페이스로 래핑하면 어떻게됩니까?

명명되지 않은 네임 스페이스에 대해 이야기하고있는 것 같습니다. 이 경우 각 컴파일 단위는 자체 (개인) 사본을 확보 할 수 있습니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

인라인 constexpr 및 익명 네임 스페이스 변수?

분류에서Dev

전역 변수의 일부인 지역 변수

분류에서Dev

전역 및 지역 변수

분류에서Dev

전역 및 함수의 다른 초기화 및 부호 포인터 값

분류에서Dev

Python 전역 및 키워드 인수

분류에서Dev

c char 포인터 메모리 및 전역 변수

분류에서Dev

지역 변수 및 전역 변수

분류에서Dev

Browserify 개인 전역 변수

분류에서Dev

Stata 및 전역 변수

분류에서Dev

전역 변수 및 innerHTML

분류에서Dev

Jmeter 및 전역 Beanshell 변수

분류에서Dev

MPI 및 전역 변수

분류에서Dev

동일한 함수의 두 가지 버전 (인라인 또는 constexpr 용)

분류에서Dev

클래스 및 외부 클래스의 전역 변수

분류에서Dev

JavaScript 모범 사례 : 인라인 onsubmit () 제거, 전역 변수

분류에서Dev

전역 및 지역 변수 할당

분류에서Dev

전역 및 지역 변수 JavaScript

분류에서Dev

JS의 지역 및 전역 변수

분류에서Dev

C 지역 및 전역 정적 변수

분류에서Dev

루프의 지역 및 전역 변수

분류에서Dev

Polymer Dart, 전역 변수 및 데이터 바인딩 (관찰 가능)

분류에서Dev

정적 constexpr 변수가 C ++로 인라인됩니까?

분류에서Dev

값 확인 전 변수 존재 여부 확인

분류에서Dev

Python : 전역 및 변경 변수 참조

분류에서Dev

if 부울 변수로 clojurescript의 라인 클래스 전환

분류에서Dev

다음 코드에서 사용되는 인수, 매개 변수, 지역 변수 및 전역 변수를 식별합니까?

분류에서Dev

조건부 constexpr 변수

분류에서Dev

dll에 여러 클래스 및 전역 변수가있는 여러 dll

분류에서Dev

영역의 라인 처리 여부