有可能做这样的事情:
const char* str = "AaBbCc";
string str_up = boost::to_upper_copy(str); // str_up will be "AABBCC"
Run Code Online (Sandbox Code Playgroud)
最后一行无法编译.
当然我可以如下,但它不那么"规范":
const char* str = "AaBbCc";
string str_up = str;
boost::to_upper(str_up);
Run Code Online (Sandbox Code Playgroud)
声明to_upper_copy是:
template<typename SequenceT>
SequenceT to_upper_copy(const SequenceT &, const std::locale & = std::locale());
Run Code Online (Sandbox Code Playgroud)
从这一点可以清楚地看出,SequenceT它不能是指向char,甚至是char数组的指针,因为没有(好的)方式返回的副本可以具有相同的类型.
您可以明确强制类型为string:
string str_up = boost::to_upper_copy<string>(str);
Run Code Online (Sandbox Code Playgroud)
这里解释文档中的内容SequenceT和RangeT含义:字符串表示.简而言之,两者都不是a const char*,但是RangeTarguments接受arrays(char [X]).