пятница, 10 июля 2009 г.

[prog.bugs] C++: “a” + 2?

Сколько раз в священных войнах по поводу разных языков программирования обсасывался аргумент, что хорошие статически-типизированные языки не позволяют складывать строки с числами? И C++ не самый плохой статически-типизированный язык. Казалось бы, что в нем это невозможно. Однако:

#include <iostream>
#include <string>

int main() {
 std::string a( "1" );
 std::string b( "2" );

 a += b.size();
 std::cout << a << std::endl;
}

Этот код вполне себе работает :( Проверял на Visual C++ 7.1 и GCC 4.3.2. Видимо, size_t автоматически конвертируется к char, после чего вызывает operator+=(char).

Обнаружил эту ситуацию из-за ошибки в коде: скопировал фрагмент и забыл убрать обращение к методу size(). Потом был обескуражен тем, что компилятор мне ничего не сказал по этому поводу.

Отправить комментарий