0

假设我想写一个这样的函数:

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;
}

但这会发出很多警告,暗示不应该这样做。

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

4

3 回答 3

5

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

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

于 2012-06-30T15:53:20.107 回答
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 对象)的方法一起使用时,它仍将按预期工作。

于 2012-06-30T15:56:16.917 回答
0

做一个:

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

如果你觉得更舒服。

于 2012-06-30T15:55:39.837 回答