Привет всем!
Столкнулся с забавным глюком, который проявляется на всех последних копиляторах MSVC (проверил четыре версии: 7.1, 8, 9 и 10). В выражениях подобных следующему:
"0123456789" + 2
строковый литерал, являющийся константным массивом символов, не преобразуется к указателю. И конечным типом такого выражения по-прежнему является константный массив. И, что самое интересное, размер результирующего массива равен размеру исходного!
Вот пример, подтверждающий этот факт:
#include <iostream>
int main()
{
std::cout << sizeof("123456789") << std::endl; //Output: 10
std::cout << sizeof("123456789" + 5) << std::endl; //Output: 10
const char (&a)[10] = "123456789"; //ok
const char (&b)[10] = "123456789" + 3; //ok
const char (&c)[10 - 3] = "123456789" + 3; //error C2440: 'initializing' : cannot convert from 'const char [10]' to 'const char (&)[7]'
}
Обратите внимание на сообщение об ошибке!