형식이 아닌 템플릿 인수에 대한 기사를 읽었으며 그 내용은 다음과 같습니다.
컴파일시 정수를 전달할 수 있습니다. 즉, 컴파일 된시 간수 표현이므로 100
, 100+99
, 1<<3
등이 허용됩니다. abs(-120)
과 같은 함수 호출과 관련된 인수는 허용되지 않습니다.
형식이 아닌 템플릿 인수
예 :
template<class T, int SIZE>
class Array{};
int main(){
Array<int, 100+99> my_array; // allowed
Array<int, abs(-120)> my_array; // not allowed
}
무엇 100 + 99과 ABS (-120)의 차이?
어떻게 100 + 99 컴파일 된 시간과 abs (-120)되지 않습니다?
정수 리터럴이 객체로 간주되는지 의심 스럽습니다. 그렇다면 연산자 오버로딩 개념을 사용할 수없는 곳에서'C'가 어떻게했는지 궁금합니다. – Mahesh
C++이 순수한 OO 언어 인 경우, 그렇습니다. 그러나 그렇지 않습니다. 계속해서'100.operator + (99)'를 시도하고 무슨 일이 일어나는 지보십시오. –
컴파일 타임에 어떤 식을 의미있게 평가할 수 있는지 선택하는 것은 어느 시점에서 필연적 일 수 있습니다. C++은 이것을 보수적으로 선택하기 때문에 대부분 사소한 표현식, 템플릿 또는 "안전하다"는 것을 알 수 있습니다. 예 : 컴파일러가 어떻게'printf ("")'를 컴파일 할 때 평가할 수 있는지 알 수 있습니까? – millimoose