说我想写一个这样的函数:
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;
}
但是这会发出很多警告,暗示它不应该如何完成。
然后处理字符串参数的正确方法是什么?
答案 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”));
如果你觉得它更舒服。