【发布时间】:2011-09-08 23:37:06
【问题描述】:
例子:
std::ifstream in("some_file.txt");
std::string line; // must be outside ?
while(getline(in,line)){
// how to make 'line' only available inside of 'while' ?
}
Do-while 循环不适用于第一次迭代:
std::ifstream in("some_fule.txt");
do{
std::string line;
// line will be empty on first iteration
}while(getline(in,line));
当然,一个人总是可以拥有if(line.empty()) getline(...),但这感觉不太对。
我也想过滥用逗号运算符:
while(string line, getline(in,line)){
}
但这不起作用,MSVC 告诉我这是因为line 不能转换为布尔值。通常,以下顺序
statement-1, statement-2, statement-3
应该是type-of statement-3 类型(不考虑重载的operator,)。我不明白为什么那个不起作用。有什么想法吗?
【问题讨论】:
-
您似乎对
getline()的任一版本的工作方式存在根本性的误解。我建议查看cplusplus.com/reference/string/getline - 它不会返回布尔值。 -
@Brian:看来你有误会。 :)
getline返回传入的流对象,它可以隐式转换为void*,void*可以隐式转换为bool。或者在 C++0x 中,流对象将在诸如if、while等布尔上下文中直接隐式转换为 bool。 -
我不明白。为什么 for 循环版本不起作用?
line在第一次迭代时不会为空。在进入循环之前执行条件语句。 -
@Benjamin:啊!那是听别人说话而不测试自己的结果。 :
标签: c++ scope while-loop getline