0

我开始从具有 Java 和 C# 知识的一般编程背景中学习一些 C++。我正在处理一些字符串,我对一些字符串函数感到沮丧。我习惯于字符串函数返回一个新字符串,而旧字符串保持不变。我知道这是在 C# 和 Java 中完成的,因为字符串是不可变的,但我真的希望 C++ 中的字符串方法也能以这种方式工作。有什么我想念的吗?现在我正在做这样的事情:

std::string temp = word;
Func(temp.erase(i , 1));

编辑:这就是我的想法:

Func(word.substr().erase(i , 1);

大家觉得哪一个最好?我想这是一件小事,只是想知道。

4

2 回答 2

1

在 C++ 中,您有两种可能性:“就地”编辑,或者返回一个新字符串,例如可以使用substr 。

好的我明白了。它的一个变种:

Func( string(word).erase(i,1) );
于 2013-03-28T20:04:33.637 回答
1

每当您想要副本时,请明确声明它:

std::string copy = original;
copy.erase(startPos, size);

当您实际上不需要副本时不断地复制字符串是对性能的浪费,而 C++ 被设计为具有极高的性能,因此大型程序(如游戏、办公套件或 Web 浏览器)即使在旧硬件上也可以顺利运行。

为了满足这一非常重要的需求,C++ 的座右铭是“不要为不需要的东西买单”,整个语言都是围绕着这一点设计的。

这并不意味着其他语言(如 Java)更差或更好,只是它们服务于不同的目的和不同的需求,因此功能不同。Java 的主要目的是“在任何地方和任何地方运行相同的可执行文件”(字面意思是:“一次编写,到处运行”),这就是它存在于虚拟机上的原因,也是为什么 Java 代码可以在 10 美元的手机、1000 美元的智能手机、电视、电脑、网络浏览器和微波炉。

于 2013-03-28T20:10:14.497 回答