gpt4 book ai didi

c++ - 字符串 C++ 操作

转载 作者:太空狗 更新时间:2023-10-29 20:58:43 28 4
gpt4 key购买 nike

为什么下面的代码会出现编译错误?

#include<iostream>
#include<string>
using namespace std;

int main()
{
string str="abc";

string result=str[0];
cout<<result<<endl;
return 0;
}

但是,下面的代码可以正常工作:

#include<iostream>
#include<string>
using namespace std;

int main()
{
string str="abc";

str=str[0];
cout<<str<<endl;
return 0;
}

我在 unix 中工作,编译命令是:"g++ -g test.cpp -std=c++11 -o a", thenm ./a

编译后第一个test.cpp报错:

test.cpp:9:21: error: invalid conversion from 'char' to 'const char*' [-fpermissive]
string result=str[0];
^
In file included from /usr/um/gcc-4.8.2/include/c++/4.8.2/string:52:0,
from /usr/um/gcc-4.8.2/include/c++/4.8.2/bits/locale_classes.h:40,
from /usr/um/gcc-4.8.2/include/c++/4.8.2/bits/ios_base.h:41,
from /usr/um/gcc-4.8.2/include/c++/4.8.2/ios:42,
from /usr/um/gcc-4.8.2/include/c++/4.8.2/ostream:38,
from /usr/um/gcc-4.8.2/include/c++/4.8.2/iostream:39,
from test.cpp:1:
/usr/um/gcc-4.8.2/include/c++/4.8.2/bits/basic_string.h:490:7: error: initializing argument 1 of 'std::basic_string<_CharT, _Traits, _Alloc>::basic_string(const _CharT*, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]' [-fpermissive]
basic_string(const _CharT* __s, const _Alloc& __a = _Alloc());
^

最佳答案

std::basic_string没有 any constructor需要一个 CharT争论。这意味着 std::string (即 std::basic_string<char> )不能从单个 char 构造.

但是,该类确实有一个 assignment operator overload需要一个 CharT参数,这就是您的第二个示例编译的原因。

这两种情况的不同之处在于,在第一种情况下,您正在执行复制初始化,从技术上讲,这意味着您首先尝试构建一个临时的 std::string来自 char 的实例参数,然后将其复制到 result .在第二个中,您正在执行赋值,这意味着为现有的 std::string 分配一个新值。实例。


basic_string确实有一个构造函数,它接受一个计数后跟一个字符:

basic_string(size_type count, CharT ch, const Allocator& alloc = Allocator());

因此,如果您将有问题的行更改为

,您的原始示例将会编译
string result = {1, str[0]};

关于c++ - 字符串 C++ 操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26900197/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com