【发布时间】:2017-08-17 19:50:09
【问题描述】:
我正在学习 C++,并在 C++ 入门中找到了以下代码:
int main() {
string s("some string");
for(decltype(s.size()) index = 0; index != s.size() && !isspace(s[index]); ++index)
s[index] = toupper(s[index]);
cout << s;
}
我理解代码将字符串中的第一个单词大写,输出为
SOME string
我很好奇的是为什么你需要使用decltype(s.size()) 来声明索引的类型。如果我将其更改为int index =0,代码仍然可以正常编译和运行。对我来说使用int 似乎更容易。我想我在这里遗漏了一些导入概念,任何反馈都会非常有帮助。谢谢!
【问题讨论】:
-
我认为关键是 string::size() 的返回值不太可能是 int,使用 decltype 可以为您提供正确的类型..
-
有这样一个typedef,称为
std::string::size_type -
看起来像是一个人为的例子,因为在实践中,人们会简单地使用
std::size_t作为索引类型,或者通过使用 range-for 循环for(auto& c: s){ if(isspace(c)) break; c = toupper(c); }来摆脱索引变量。
标签: c++