当前位置:  开发笔记 > 编程语言 > 正文

字符串文字和字符文字可以连接吗?

如何解决《字符串文字和字符文字可以连接吗?》经验,为你挑选了3个好方法。

为什么name在以下C++代码中行为不端?

string name =  "ab"+'c';

等效代码在Java/C#中的行为如何?



1> Eclipse..:

尝试

std::string name = "ab" "c";

要么

std::string name = std::string("ab") + c;

在C++中,"ab"不是a std::string,而是指向字符串的指针.向指针添加整数值时,会得到一个新指针,指向字符串的下方:

char *foo = "012345678910121416182022242628303234";
std::string name = foo + ' '; 

name被设置为"3234",因为''的整数值是32,并且在foo开头之后的32个字符是字符串结尾之前的四个字符.如果字符串较短,您将尝试访问未定义内存区域中的内容.

解决方法是从字符数组中生成一个std:string.std:strings允许您按预期将字符追加到它们:

std::string foo = "012345678910121416182022242628303234";
std::string name = foo + ' '; 

name 设置为"012345678910121416182022242628303234"



2> jalf..:

问题是"ab"不是C++ std::string,而是a const char[3].所以它正在寻找的+运营商是operator+ (const char[3], char).这不存在,因此编译器会尝试让数组衰减到指针,因此它会查找operator+ (const char*, char).这是存在的,所以编译器会选择它,但它做错了.将一个整数值(char)添加到指针(const char*)是一个很常见的操作,显然,这就是这个operator +的作用.理解这一点的关键是要意识到第一个参数是1)一个数组,2)每当数组没有意义时的指针.它在C中也被用作字符串,是的,但它不是字符串.它是一个指针(或偶尔,一个数组).

有一个operator+ (const std::string&, char)连接,但编译器甚至不会查找它,因为第一个参数不是std :: string.

所以解决方案是手动创建字符串:

string name = std::string("ab")+'c';

现在编译器可以找出正确的operator +来调用.



3> greyfade..:

在C++中,编译器正在寻找具有此原型的函数:

T operator+ (const char*, char);

由于没有一个,它无法弄清楚T是什么并且无法解析operator<<调用,因此它回退到唯一的解决方案:指针添加.在Josh的答案中连接到字符串没有问题,因为它存在一个函数.

推荐阅读
Life一切安好
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有