【问题标题】:How to use QString::replace on a const& parameter?如何在 const& 参数上使用 QString::replace?
【发布时间】:2018-04-09 12:25:36
【问题描述】:

以无损方式调用QString::replace 的最佳方式是什么?

我有一个以const QString&为参数的函数,那么我不能直接调用replace,因为这个函数修改了对象(remove也一样)。
我想对参数进行链接调用并将其用作如下表达式:

return myString.replace(QRegExp("\\s+"), "_").remove("someSuffix");

当然,我可以将函数定义更改为按值而不是引用来获取 QString,但我不喜欢这种解决方案。稍后可能会想知道为什么我们不像其他参数那样通过引用传递。

我也可以制作本地副本,但有没有更实用/干净的方法?

【问题讨论】:

  • 这里按值传递是最好的解决方案,下一个是创建本地副本。你还需要什么?
  • 您的myString 字符串应该是您传递的函数参数的副本。
  • 最邪恶的方式(如果初始值是非常量):return const_cast<QString&>(someValue).replace(QRegExp("\\s+"), "_").remove("someSuffix");

标签: c++ qt qstring


【解决方案1】:

你可以创建一个临时的并对其进行操作:

return QString(argument).replace(QRegExp("\\s+"), "_").remove("someSuffix");

但是,我认为按价值接受论点并没有什么不好的。您正在以一种或另一种方式复制参数,并且通过值接受清楚地向用户表明这一点。

【讨论】:

  • 我也找到了那个解决方案。我真的很喜欢 replacereplace! 的 Ruby 方法,它非常方便。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-11-06
  • 2022-08-12
  • 1970-01-01
  • 2013-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多