2012-06-06 115 views
0

我正在使用Borland C++ Builder 6试图做一些简单的字符串连接。但是,我遇到了我认为是一个有趣的问题。Borland C++ Builder 6和字符串连接

一切我能在网上找到状态,我应该能够做这样简单的事情,因为这:

String word = "a" + "b" + "c"; 

然而,当我尝试编译这段代码,我得到一个“无效的指针相加”错误。我可以尽可能将每个部分分配给自己的变量,并将每个部分加在一起以获得所需的输出。然而,我认为这是多余的,因为这是一个简单的例子。

我已经能够获得类似上述的东西工作,因为所需的唯一途径就是通过这样做:

String a = ""; 
String word = a + "a" + "b" + "c"; 

我的问题是:为什么会在第二个例子中工作得很好,但不第一?

回答

2

的原因是,"a"类型是char*(即:指针到字符),当你写

"a" + "b" 

您要添加到一起指针,这是不允许的,这意味着。

当你创建一个String类型,operator+超载如此

String a = ""; 
a + "b" 

增加了一个指针到字符到String,它有自己的级联确定指标。

+0

我明白了。所以基本上,如果我想以这种方式添加字符串,我应该使用上面提供的第二个示例。尽管我认为它是奇怪的行为(我通常是C#程序员) –

+1

@ hawk4031 - 正确。你也可以使用一个匿名的String对象:'String word = String(“a”)+“b”;' – Attila

0

我不太确定,但这可能是因为争论。第一行中的“a”是char*,因此添加其他字符串仍然会导致char*的结果,并且无法直接将其指定给String对象。第二种情况表明,如果第一个参数是String类型,则所有结果都是字符串,因此可以进行赋值。