에 대한 const를 매개 변수 나는 다음과 같은 코드는 컴파일되지 않는 이유에 의해 매우 혼란 스러워요 :앞으로 완벽한 일정한 평가
template <typename T, typename... Ts>
void TEST(T&& t, Ts&&... ts) {
if constexpr(sizeof...(ts) > 0) {
TEST(std::forward<Ts>(ts)...);
static_assert(t == 2 , "parameter must be 2");
}
}
template <typename... Ts>
void VARIADIC(Ts&&... ts) {
TEST(std::forward<Ts>(ts)...);
}
int main(int argc, char* argv[]) {
constexpr int a1 = 2;
constexpr int a2 = 2;
VARIADIC(a1, a2);
}
기본적으로, 나는에 전달 된 매개 변수에 대한 몇 가지 컴파일 시간 체크를 할 노력하고 있어요 기능 VARIADIC
. 그러나 컴파일러는 다음에 대해 불평 :
error: non-constant condition for static assertion
static_assert(t == 2 , "parameter must be 2");
^~~~~~~~~~~~~
error: ‘t’ is not a constant expression
상수 지정된 파라미터 a1
및 a2
매우 분명하고, 가변 인자에 대한 검사를 수행하는 몇 가지 방법이 있어야합니다. 그들은 상수 표현식 또는 라이브 시간으로 초기화하는 경우 변수 또는 참고 만 핵심 상수 식입니다 정의에 시작 :
대문자를 모두 잃어 버릴 수 있습니까? –
혼란은 무엇입니까? 엔티티는 상수 표현식의 일부로 도입 될 때만 상수 표현식으로 취급됩니다. 분명히 함수에 대한 매개 변수는 그 의미에서 상수 표현이 아닙니다. 그러나 함수 결과 *는 상수 표현이 될 수 있습니다. –
오류는 비정상 값으로 호출 될 수있는 TEST 함수의 정의에 있습니다. 당신이 일정한 값으로 TEST를 호출한다는 사실은 중요하지 않습니다. –