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

问题描述 投票:1回答:2

我最近开始研究使用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是否进行了一些自动转换?对于C ++ Builder,是否有“OMG我不能相信他们这样做”的列表?

c++ string c++builder
2个回答
7
投票

这是Borland C ++ Builder String(而不是标准C ++的std::string)。

正如this Borland C++ Builder Strings reference所提到的那样,它允许你创建几乎所有类型的字符串:

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

整数:

AnsiString Int = 120;

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


1
投票

这是just how it was made

常识不是允许字符串和其他类型之间的隐式转换,但是这些东西很老,现在可能不会这样做。

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

© www.soinside.com 2019 - 2024. All rights reserved.