C++ C++;生成器允许字符串与Int进行比较-为什么?

C++ C++;生成器允许字符串与Int进行比较-为什么?,c++,string,c++builder,C++,String,C++builder,我最近开始使用C++Builder(Borland)构建一个旧的解决方案 我遇到了允许一些意外操作的代码 1) 将int赋值给字符串而不进行转换: String x = 12; //this works... I would expect a type mismatch.. 2) 字符串与int的比较没有问题: String s = "12"; int x = 12; bool b = s == x; // Again... I expect an error.. C++Builder是否进

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

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

1) 将int赋值给字符串而不进行转换:

String x = 12; //this works... I would expect a type mismatch..
2) 字符串与int的比较没有问题:

String s = "12";
int x = 12;
bool b = s == x; // Again... I expect an error..
C++Builder是否进行一些自动转换? 对于C++Builder,是否有一个“天哪,我不敢相信他们会这么做”的列表

一般的看法是不允许在字符串和其他类型之间进行隐式转换,但这种东西已经很旧了,现在可能不会这样做

我建议在可能的情况下坚持使用标准类型。

这是

一般的看法是不允许在字符串和其他类型之间进行隐式转换,但这种东西已经很旧了,现在可能不会这样做


<>我建议在可能的情况下遵守标准类型。

< P>这是Borland C++ +Builder字符串(不是C++标准的<>代码> STD::String )。p> 通过这种方式,您可以创建几乎所有类型的字符串,如前所述:

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

整数:

AnsiString Int = 120;

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

< P>这是Borland C++ +Builder字符串(不是标准C++的)。p> 通过这种方式,您可以创建几乎所有类型的字符串,如前所述:

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

整数:

AnsiString Int = 120;

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

什么是
String
?它不是标准C++类型。Borland“标准”字符串类(不与C++标准<代码> STD::String 类)通常允许从整数类型隐式转换,因为它们具有非显式构造函数。IMO,许多关于C++ Builder的问题倾向于使用C++ Builder和Delphi特定类型。我不会使用一般的C++标签,只是C++的Builder标签。这样的问题就不会出现了。这是一个关于C++ Builder的字符串的问题,所以不是一般的C++问题。什么是<代码>字符串< /代码>?它不是标准C++类型。Borland“标准”字符串类(不与C++标准<代码> STD::String 类)通常允许从整数类型隐式转换,因为它们具有非显式构造函数。IMO,许多关于C++ Builder的问题倾向于使用C++ Builder和Delphi特定类型。我不会使用一般的C++标签,只是C++的Builder标签。这样的问题就不会出现了。这是一个关于C++ Builder的字符串的问题,所以不是一般的C++问题……除了<代码> STD::String 也允许这个;和断层。伯兰的行为并不伟大,但比标准的阶级行为明智一千倍。@Konrad:是吗?尝试
std::string str=0;std::cout@KonradRudolph空指针文本是一个破例,是的。但对于整数来说通常不是这样,对于问题中被问及的整数也不是这样。不,我不知道这就是你的意思,因为你没说!很公平。我本以为引号、笑脸和对segfault的引用就足够了……除了
std::string
也“允许”了;-)-和断层。伯兰的行为并不伟大,但比标准的阶级行为明智一千倍。@Konrad:是吗?尝试
std::string str=0;std::cout@KonradRudolph空指针文本是一个破例,是的。但对于整数来说通常不是这样,对于问题中被问及的整数也不是这样。不,我不知道这就是你的意思,因为你没说!很公平。我原以为引用、笑脸和提到segfault就足够了。