尝试将字符串对象添加到整数

时间:2014-04-08 23:01:23

标签: c++ string integer addition

这可能是我在谷歌搜索最近20分钟的一个非常基本的问题。我不确定我是否正确地说它,但我没有得到我理解的解释。

基本上,我有一个字符串对象,当我添加一个整数值x时,它会将字符串缩短x个字符。

以下是代码:

#include <iostream>
#include <string>

void Print::print(std::string str)
{
   std::cout << str << std::endl;    
}


print("formatString:" + 5);

输出为:tString:

现在我意识到以上是不正确的,在我的搜索过程中,我找到了纠正行为的方法,但我还没有找到内部实际发生的事情来获得上述结果。

由于

4 个答案:

答案 0 :(得分:2)

答案很简单:指针算术。

你的字符串文字(包含隐式0终结符的const char数组)在使用时衰减为const char*,你递增并传递给你的print()函数,从而调用std::string - 字符串文字的构造函数。

所以,是的,你从一个字符串对象(以0 {终止的const char数组)开始,而不是std::string对象。

答案 1 :(得分:1)

  

基本上,我有一个字符串对象

不,你没有字符串对象。 "formatString:"不是std::string,而是&#34;字符串&#34;文字。它实际上是const char*const char*定义了operator +,它接受​​一个整数并使用多个位置前进指针的值。在你的情况下,它是5。

要获得编译器错误,您必须将文字包装在std::string中。

print(std::string("formatString:") + 5);

答案 2 :(得分:0)

&#34; formatString的:&#34;是一个字符串文字,类型为const char[14]。这是一个const char数组,大小等于14(数组包含终止零)。 在像这样的表达

"formatString:" + 5

数组被隐式转换为指向其第一个元素的指针。因此,如果例如const char *p表示此指针,则表达式看起来为

p + 5

表达式的结果是指向具有索引5的数组元素的指针。即使用指针算法。

P + 5指向字符串的第一个符号&#34; tString&#34; 此表达式由类std :: string。

的构造函数使用

答案 3 :(得分:0)

检查以下内容,

#include <iostream>

void print(std::string str)
{
    std::cout << str << std::endl;
}

int main(int argc, char* argv[])
{
    //following two lines created implicitly by the compiler
    const char* pstr = "formatString";
    std::string tmp(pstr + 5);  //string c-tor: string (const char* s);

    // now tmp: --> "tString"

    print(tmp);

    return 0;
}

pstr是一个指针,当您使用+操作时,您正在执行pointer arithmetic

注意:编译器可能会创建不同的内部结构,但这是考虑上述两行的一种有益的方法。