我该如何处理c ++中的字符串参数?

时间:2012-06-30 15:51:10

标签: c++ string arguments

说我想写一个这样的函数:

int get_some_int(string index) {
    ...perform magic...
    return result;
}

但是,我也希望能够这样称呼它:

int var = obj.get_some_int("blah");

但是,我不能这样做,因为const char[4]不是const string&

我能做到:

int get_some_int(char* index) {
    ...perform magic...
    return result;
}

但是这会发出很多警告,暗示它不应该如何完成。

然后处理字符串参数的正确方法是什么?

3 个答案:

答案 0 :(得分:5)

  

我不能这样做,因为const char [4]不是const string&

不,但是std::string有一个非explicit转换构造函数,因此创建了一个临时std::string,所以你很清楚。 - http://ideone.com/xlg4k

答案 1 :(得分:1)

它应该像你一样工作

int get_some_int(string index) {  // This works as std::string has a constructor
                                  // That takes care of the conversion
                                  // from `char const*`  which you char[4] 
                                  //decays into when passed to a function

但更好的解决方案是使用const引用:

int get_some_int(string const& index) {  // works for the same reasson

在这里使用const表示函数应该如何工作,并传达有关输入如何被使用的信息。此外,当与返回const引用的方法一起使用时(例如从const对象),它仍将按预期工作。

答案 2 :(得分:0)

做一个:

int var = obj.get_some_int(string(“blah”));

如果你觉得它更舒服。