【发布时间】:2015-10-18 13:59:11
【问题描述】:
#include <string>
#include <iostream>
int main()
{
std::string test("hello world ");
std::string label("label test");
test.append(&label[3]); //----- #1
std::cout << test << std::endl;
}
对于上面的代码,我期望的是“hello world e”,但实际上它的输出是“hello world el test”。它将位置 3 之后的所有字符附加到我的字符串 test。
在#1的位置,如果我不放&符号,会出现编译错误:
str_append.cpp:10:10: error: no matching member function for call to 'append'
test.append(label[3]);
~~~~~^~~~~~
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/string:1516:19: note: candidate function not viable: no known conversion
from 'value_type' (aka 'char') to 'const value_type *' (aka 'const char *') for 1st argument; take the address of the argument with &
basic_string& append(const value_type* __s);
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/string:1513:19: note: candidate function not viable: no known conversion
from 'value_type' (aka 'char') to 'const std::__1::basic_string<char>' for 1st argument
basic_string& append(const basic_string& __str);
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/string:1525:9: note: candidate function template not viable: requires 2
arguments, but 1 was provided
append(_InputIterator __first, _InputIterator __last);
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/string:1532:9: note: candidate function template not viable: requires 2
arguments, but 1 was provided
append(_ForwardIterator __first, _ForwardIterator __last);
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/string:1515:19: note: candidate function not viable: requires 2
arguments, but 1 was provided
basic_string& append(const value_type* __s, size_type __n);
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/string:1517:19: note: candidate function not viable: requires 2
arguments, but 1 was provided
basic_string& append(size_type __n, value_type __c);
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/string:1514:19: note: candidate function not viable: requires at least 2
arguments, but 1 was provided
basic_string& append(const basic_string& __str, size_type __pos, size_type __n=npos);
^
1 error generated.
我可以解决这个问题的唯一方法是将#1 行更改为:
test += label[3];
那么,我想知道这背后的逻辑是什么? label[3] 不能返回单个字符吗?为什么当我只使用test.append(label[3]); 时它会失败。为什么test += label[3];会成功?
提前致谢。
【问题讨论】:
-
又一个“我没有阅读文档”的问题。世界有什么问题? 投反对票和哭泣