C ++ Builder允许使用Int进行字符串比较-为什么?

时间:2018-12-07 14:19:31

标签: c++ string c++builder

我最近开始研究使用C ++ Builder(Borland)构建的旧解决方案。

我遇到了允许进行一些意外操作的代码。

1)将int分配给String而不进行转换:

len=${#i}

2)比较String与int没有问题:

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

C ++ Builder会进行一些自动转换吗? 是否存在C ++ Builder的“我不敢相信他们会这样做的OMG”列表?

2 个答案:

答案 0 :(得分:7)

这是Borland C ++ Builder字符串(不是标准C ++的std::string)。

通过这种方式,您可以创建几乎所有类型的字符串,如this Borland C++ Builder Strings reference所述:

  

AnsiString类提供了许多构造函数,使您可以   创建任何类型的字符串。例如,您可以使用它来声明:

     

一个整数:

AnsiString Int = 120;

正如RemyLebeau所说:注意String不是实际类型,它是AnsiString(C ++ Builder 2007和更早版本)或UnicodeString(C ++)的别名。 Builder 2009及更高版本)。两者都实现了数字类型的隐式转换。

答案 1 :(得分:1)

这是just how it was made

普遍的看法是不允许在字符串和其他类似类型之间进行隐式转换,但是这种东西已经很老了,如今可能不会这样。

我建议尽可能坚持使用标准类型。