c++ - 评价顺序

标签 c++ operator-precedence

我想知道这样的构造(初始化列表)是否有明确定义的 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/

相关文章:

c++ - 如何使用指针到指针来传递矩阵?

java - && 运算符真的比 || 具有更高的优先级吗?运算符(operator) ?看代码

c++ - 没有匹配的函数来调用 class::class

c++ - 使用 GetProcAddress 和 EasyHook Hook 类方法和构造函数

c++ - 为什么 std::list 想不带参数调用我的分配器?

c++ - 具有多态性的对象声明中的逗号

java - 运算符优先级 - 算术和条件运算符

c - 结构指针上的前/后增量运算符

mysql - 我如何在 mysql 查询 where 子句中为 OR 提供比 AND 更高的优先级?

java - 以下代码片段不会产生预期结果