私はこの質問が何度も聞かれることを知っています、そして私はコンパイル時にそれをしたのでそれをする方法を尋ねていません。私の質問はそれがどのように機能するかです。それは私が理解していないことだからです。
char[]
関数にaを渡すと、その情報が失わ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[]
-少なくとも私が思うもの-と見なし、文字列のサイズを取得できます。それはどのように可能ですか?