我想知道这样的构造(初始化列表)是否有明确定义的 EO(评估顺序):
struct MemoryManager
{
Pair* firstPair_;//<-beg
Pair* currentPair_;
Pair* lastPair_;//<-end
MemoryManager():lastPair_(currentPair_ = firstPair_ = nullptr)
{/*e.b.*/}
};
如果是,我个人更喜欢这种方式而不是更传统的方式:
MemoryManager():firstPair_(nullptr),
currentPair_(nullptr),
lastPair_(nullptr)
{/*e.b*/}
最佳答案
正如 John Dibling 所说,对于给定的具体示例,您的构造在技术上是正确的,但它很脆弱,对于许多程序员来说很难理解。
脆性:
如果更改声明顺序,可能会失败。
如果 init 列表更改,可能会失败。
要自行评估此类构造,请将这个想法牢记在心:代码不是要指示编译器执行您的命令,而是要将您的意图传达给其他人(也许还有您以后的自己)。
因此,请尝试编写清晰的代码。
干杯,
关于c++ - 评价顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4438689/