【发布时间】:2012-11-29 01:42:23
【问题描述】:
我正在尝试使用 RAII 创建对象,这些对象作用于流直到它们被销毁。例如,我有一个流,每当添加 endl 时它就会自行刷新。大多数时候我想要这个,但并非总是如此。我希望能够说“不要在 endl 上刷新”,但我也需要它是异常安全的。所以我不能只做stream->NoFlush() 来设置一个班级成员。无论如何,我想知道的是这个。如果我有类似的代码
CStreamModifier no_flush;
stream->NoFlush(no_flush);
// as long as no_flush is in scope I get the behaviour I want
... do some stuff on the stream, without referencing no_flush ...
// no_flush goes out of scope here.
是否允许编译器优化 no_flush 的生命周期?例如,它在第 2 行之后没有使用,但我需要它一直保留到最后。我还没有真正听说过这样的优化,所以我认为我还可以,但我想确定一下。
【问题讨论】: