if语句中的getline

unk*_*own 4 c++ pointers getline

从我读过的,getline()在布尔上下文中使用返回隐式转换为void*.我没有在网上任何地方找到任何真正的参考声明.到处它说,隐式转换不存在,并且,在一个布尔上下文指针应该是相同的种(如果ptr == 00被转换为类型指针ptr).

同样在标准中,在布尔上下文中它将转换为未指定的布尔类型.那有什么意思?

Mar*_*ork 5

简而言之:

这意味着您可以getline()if语句中使用它,如果它工作,您输入if语句块.

在龙:

getline()在布尔上下文中使用返回隐式转换为void*.

以上在技术上并不正确(但结果是这样).getline()实际上返回对其使用的流的引用.当流在布尔上下文中使用时,它将转换为可在布尔上下文中使用的未指定类型(C++ 03).在C++ 11中,这已更新并转换为bool.

  • 如果getline()成功,则返回状态良好的流.当它转换为bool 类似的类型时,它返回一个非空指针(C++ 03),当在布尔上下文中使用时,它等效于true.
  • 如果getline()失败,则返回处于错误状态的流.当它转换为bool 类似的类型时,它返回一个空指针(C++ 03),当在布尔上下文中使用时,它等效于false.

我没有在网上任何地方找到任何真正的参考声明.

  • 21.4.8.9插入器和提取器[string.io]
    • 定义:std :: istream&getline(std :: istream&,std :: string&)
  • 27.7.2.1类模板basic_istream [istream]
    • 定义:std :: istream&getline(char_type*s,streamsize n);
  • 27.5.5.1概述 [ios.overview]
    • 定义如何在布尔上下文中转换流

到处它说,隐式转换不存在,并且,在一个布尔上下文指针应该是相同的种(如果ptr == 00被转换为类型指针ptr).

void*布尔上下文中的null 等效于false,任何其他void*等效项true.(虽然类型实际上没有指定,但你可以把它想象成一个void*(只是为了让它易于思考).

同样在标准中,在布尔上下文中它将转换为未指定的布尔类型.那有什么意思?

这意味着您可以使用任何条件语句:

if (getline())
{
     // If getline worked processes data
}

while(getline())
{
    // getline. If it works then processes then try again.
}
Run Code Online (Sandbox Code Playgroud)