나는이 질문을 여러 번 물었고 컴파일 타임에 그렇게했기 때문에 어떻게해야하는지 묻지 않았다. 내 질문은 내가 어떻게 이해가 안되기 때문에 그것이 어떻게 작동하는지입니다. 함수에 char[]
를 전달할 때C++에서 컴파일 타임에 정적 문자 배열 크기
는 그것의 정보를 푼다 및 char*
을지고 그 때문에 우리는 템플릿을 사용하여 컴파일시에 문자 배열의 크기를 얻을 수 없다, 그래서 난 시도 자체를 문자열을 전달하고 일 :
template <int N> inline int arr_len(const char (&)[N]) { return N - 1; }
#define STR "this is an example!"
const char *str_ptr = STR;
int main()
{
int array_size = arr_len(STR);
}
이 코드는 VC++ 2008, Intel C++ 12 및 GCC 4.7에서 테스트되었으며 작동합니다.
문자열 자체를 전달하면 컴파일러에서 const char[]
으로 간주합니다. 적어도 내가 생각한 것입니다. 그리고 문자열 크기를 얻을 수 있습니까? 어떻게 가능합니까?
사용하는 배열의 크기가 서로 다른 경우 'arr_len'버전이 다르며 작업 할 수있는 유일한 유형의 배열의 길이를 반환합니다. –
맞지만 최적화가되면 문자열 길이가됩니다. –
사실 그것은 최적화와 관련이 없습니다. 이 모든 것은 컴파일 할 때 발생합니다. –