【问题标题】:How many parameters does ios::setstate actually take?ios::setstate 实际取多少参数?
【发布时间】:2012-02-22 00:23:08
【问题描述】:

我看到的函数 ios::setstate( iostate state ) 的每个定义都表明,当我使用以下函数调用编译程序时,该函数采用 ONEONLY ONE 参数,一切都编译并运行得很好:

mystream.setstate( std::ios_base::badbit, true );

第二个参数究竟是什么,为什么没有关于它的文档?

编辑:我正在使用最新版本的 Microsoft Visual Studio 2010 的命令行编译器。

【问题讨论】:

    标签: c++ istream setstate


    【解决方案1】:

    正如您所指出的,它需要接受单个参数,但实现允许通过具有默认值的参数扩展成员函数(第 17.6.5.5 节)。换句话说,只要这有效:

    mystream.setstate( std::ios_base::badbit );
    

    您的编译器符合要求。不过,没有什么说您的代码不需要可以工作。

    (您的库实现已决定拥有一个布尔参数会很有用。您永远不会注意到它,因为它有一个默认值,但您仍然可以进入特定于实现的领域并自己提供参数。无论这是否是个好主意显然是另一个问题,但可能不是。)

    【讨论】:

    • 也可能是过载。
    • 可能值得注意的是libstdc++ 4.1 doesn't
    • @LightnessRacesinOrbit:是的,它们在很大程度上是等价的。我之所以选择说我所做的声明,是因为允许重载是根据使用默认值“扩展”函数来说明的。
    • @LightnessRacesinOrbit:哈,这就是你去的地方:换了一个新名字!我一直想知道你在哪里。你一直都在这里。 :P
    • @Tech_Guy:你真的不应该想知道,它是供实现使用的。你能做的最多的事情就是在定义中寻找并尝试追踪它的作用,但你不应该尝试使用它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-25
    • 2018-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-30
    • 1970-01-01
    相关资源
    最近更新 更多