const char to string with string.at()

时间:2016-05-21 04:40:52

标签: c++ string char substring const

我有一个字符串

use strict;
use warnings;
use Benchmark qw(:all);

my %hash = 1 .. 30_000;

cmpthese(-3, {
  values => sub {
    for my $v (values %hash) { }

  },
  keys => sub {
    for my $v (keys %hash) { }
  },
  avalues => sub {
    for my $v (@{[ values %hash ]}) { }
  },
  akeys => sub {
    for my $v (@{[ keys %hash ]}) { }
  },
});

__DATA__
         Rate   akeys    keys avalues  values
akeys   196/s      --    -33%    -56%    -71%
keys    294/s     50%      --    -35%    -57%
avalues 451/s    130%     54%      --    -33%
values  677/s    245%    131%     50%      --

永远不会改变。

另外,我有以下功能:

const std::string myString = "my string";

我想通过char查看字符串char并对每个子字符串执行一些操作(我将每个子字符串传递给void myFunction(const std::string str); )。

这是我先提出的代码:

myFunction

但它给了我错误“无法将const char转换为字符串”。所以我想出了以下代码:

for (std::size_t i = 0; i < myString.length(); ++i) {
  myFunction(myString.at(i));
}

哪个有效,但我感觉不太好。

此解决方案是否正确?或者只是巧合才有效(就像未定义的行为,但我很幸运,它在我测试时有效)?

另外,for (std::size_t i = 0; i < myString.length(); ++i) { char currentChar[2] = {myString.at(i), '\0'}; myFunction(currentChar); } 中传递的字符串是否应该是const?

1 个答案:

答案 0 :(得分:3)

是的,您的解决方案是正确的。它既不高效也不美观,但它有效。

myFunction需要一个字符串。你不能传递一个角色。字符和单字符串是不同的东西。此外,没有构造函数将字符转换为字符串。

由于myFunction需要一个字符串,你应该给它一个字符串,或至少const char*,它可以隐式转换为字符串。

你确定myFunction确实需要字符串而不是字符吗?

另外,您确定myFunction不应通过引用接收字符串吗?