h0n9xu 2011-04-29 17:00
浏览 215
已采纳

string类的两个问题

看C++ primer 第四版(英文版)遇到了几个问题,请赐教!

问题1:用string,vector等包含的库是不是在iostream中有说明呢?在C++ primer的p132中提及When we compare library strings...这个意思不是要包含strings库吗?但是我在预编译加上#includeg++会报错(没有这个文件)?

问题2:在C++ primer的p86指出当一个string对象st1用另外一个string类对象str2赋值时所作的操作是:编译器需要delete和st1相关联的字符空间,并重新分配新的可供st2字符存放的空间,然后将st2对应的字符分配拷贝到st1中。
那么这里的st1所指的首地址是否改变呢?我一直以为是改变的,但是按照下面的程序看来是不变的,我想问一下这里到底做了什么呢?string类是不是可以动态分配同时可以自动回收空间,这和VLA是一个道理吗?
[code="c++"]
#include

int main(void)
{
std::string str1="str1\n";
std::cout < <str1;
std::cout < <str1.size() < <std::endl;

std::string str2(str1); 
std::cout < <str2 < <std::endl; 
std::cout < <"address of str1 :" < <&str1 < <std::endl; 
std::cout < <"address of str2 :" < <&str2 < <std::endl; 

std::string str3("str3\n"); 
str2=str3; 
std::cout < <"address of str3 :" < <&str3 < <std::endl; 
std::cout < <"address of str2 :" < <&str2 < <std::endl; 

return 0; 

}
[/code]

  • 写回答

4条回答 默认 最新

  • turing-complete 2011-04-29 19:01
    关注

    [quote]但是string不是内置类型,和int不同的啊,那本书p86说需要delete空间之后再重新分配的啊[/quote]

    这一点非常正确,但是delete不是需要程序员手动进行的,是在超出其作用域的时候编译器会自动插于析构函数的执行。

    简而言之,string类实例的复制,是“深复制”。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 spss统计中二分类变量和有序变量的相关性分析可以用kendall相关分析吗?
  • ¥15 拟通过pc下指令到安卓系统,如果追求响应速度,尽可能无延迟,是不是用安卓模拟器会优于实体的安卓手机?如果是,可以快多少毫秒?
  • ¥20 神经网络Sequential name=sequential, built=False
  • ¥16 Qphython 用xlrd读取excel报错
  • ¥15 单片机学习顺序问题!!
  • ¥15 ikuai客户端多拨vpn,重启总是有个别重拨不上
  • ¥20 关于#anlogic#sdram#的问题,如何解决?(关键词-performance)
  • ¥15 相敏解调 matlab
  • ¥15 求lingo代码和思路
  • ¥15 公交车和无人机协同运输