Тип строкового литерала "ab"
равен const char(&)[3]
.
То есть sizeof("ab") = sizeof(const char(&)[3]) = sizeof(char) * 3
, что на вашем компьютере равно 3.
А в другом случае t
- это просто указатель.
То есть sizeof(t) = sizeof(void*)
, что составляет 4 байта на вашем компьютере.
-
Примечание:
Если вы добавите "ab"
к L
и сделаете его L"ab"
, тогда
тип строкового литерала L"ab"
будет const wchar_t(&)[3]
.
Такsizeof(L"ab") = sizeof(const wchar_t(&)[3]) = sizeof(wchar_t) * 3
что равно 12 для ideone:
http://ideone.com/IT7aR
Так как * sizeof(wchar_t) = 4
для ideone, который использует GCC для компиляции!