C ++ Builder позволяет сравнивать строки с Int - почему? - PullRequest
0 голосов
/ 07 декабря 2018

Я недавно начал работать над старым решением, построенным с использованием C ++ Builder (Borland).

Я столкнулся с кодом, который допускает некоторые неожиданные операции.

1) присвоение int для Stringбез преобразования:

String x = 12; //this works... I would expect a type mismatch..

2) Сравнение String с int без проблем:

String s = "12";
int x = 12;
bool b = s == x; // Again... I expect an error..

C ++ Builder выполняет автоматическое преобразование?Есть ли список «OMG, я не могу поверить, что они делают это» для C ++ Builder?

Ответы [ 2 ]

0 голосов
/ 07 декабря 2018

Это строка Borland C ++ Builder (не std::string Стандартного C ++).

Это сделано таким образом, чтобы вы могли создавать практически все виды строк, как в этой ссылке на Borland C ++ Builder Strings упоминается:

Класс AnsiString предоставляетмножество конструкторов, которые позволяют создавать строки любого типа.Например, вы можете использовать его для объявления:

целого числа:

AnsiString Int = 120;

Как сказал РемиЛебо: обратите внимание, что String не является действительным типом, это псевдоним дляAnsiString (C ++ Builder 2007 и более ранние версии) или UnicodeString (C ++ Builder 2009 и более поздние версии).Оба реализуют неявные преобразования из числовых типов.

0 голосов
/ 07 декабря 2018

Это , как это было сделано .

Общая мудрость - не разрешать неявные преобразования между строками и другими типами, подобными этому, но этот материал довольно старый и, вероятно, не будетбыть сделанным так в наше время.

Я бы посоветовал придерживаться стандартных типов, где это возможно.

...