当将函数的返回值乘以零时,为什么不短路?

鳄鱼

考虑如下函数:

unsigned int fact(unsigned int i) {
    if (i <= 1) { return 1; }
    return i * fact(i-1);
}

如果要实例化一个新变量unsigned int fthat f = 0 * fact(5),为什么它不“短路”?

unsigned int fact(unsigned int i) {
    std::cout << "a";
    if (i <= 1) { return 1; }
    return i * fact(i-1);
}

int main() {
    unsigned int f = 0 * fact(5);
}

输出是aaaaa如果f只能为零,为什么假设它知道返回类型,为什么还要调用函数呢?它不是从左到右求0 * (unsigned int),看到并知道右值是0吗?

罗威

对于&&(逻辑),||(逻辑)和?(三元运算符)必须进行短路评估对于其余的运算符,这是(可选)优化。

的评价fact(5)在表达0 * fact(5)不能在一般的优化掉,因为你知道,整个表达式的结果是0,因为调用fact()可能引入副作用(例如,修改某些全局变量),所以它必须被调用。

就像在此评论中所说,fact(5)如果一个好的编译器可以证明没有副作用那么它将优化对的调用

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么这不短路?

来自分类Dev

为什么释放键时函数返回值?

来自分类Dev

赋值为零时,通过从块中返回值来分配变量

来自分类Dev

函数不返回值,为什么?

来自分类Dev

为什么finger没有非零的返回值?

来自分类Dev

SQL CASE,当值等于零时,从具有相同值的另一行返回值

来自分类Dev

当lowBound设置为零时,为什么PulP为混合问题返回负值?

来自分类Dev

实际上,为什么&&和||重载?不短路吗?

来自分类Dev

当我将暗淡的长度设置为零时,为什么不会引起错误?

来自分类Dev

返回值到innerHTML时,为什么函数内的innerHTML会被忽略?

来自分类Dev

为什么我总是得到零时差?

来自分类Dev

当组浮点值总计为0时,为什么SQL SUM()函数返回的总和不为零?

来自分类Dev

为什么此函数不返回值?

来自分类Dev

为什么此函数不返回值?

来自分类Dev

mcc函数无法返回值,为什么?

来自分类Dev

为什么没有从函数返回值?

来自分类Dev

为什么打印函数名称会返回值?

来自分类Dev

为什么这个简单的函数不返回值?

来自分类Dev

为什么 Scrapy 不从函数返回值?

来自分类Dev

为什么不对函数的返回值求值,而对宏的返回值求值呢?

来自分类Dev

为什么异步函数返回值的承诺而不是直接返回值?

来自分类Dev

当我们尝试将变量除以零时,为什么编译器没有显示错误

来自分类Dev

ARM Assembly-将r7清零时,为什么我的应用程序崩溃?

来自分类Dev

为什么声明返回值时我的函数没有结束(Node.js和Express.js)

来自分类Dev

为什么当我使用函数返回值并崩溃浏览器时 *ngFor 会无限循环?

来自分类Dev

pthread_mutex_lock()仅在将返回值分配给变量时起作用,为什么?

来自分类Dev

为什么量角器有时返回承诺,有时返回值?

来自分类Dev

除以零时保持旧值

来自分类Dev

为什么Rust在主函数中没有返回值,以及无论如何如何返回值?

Related 相关文章

  1. 1

    为什么这不短路?

  2. 2

    为什么释放键时函数返回值?

  3. 3

    赋值为零时,通过从块中返回值来分配变量

  4. 4

    函数不返回值,为什么?

  5. 5

    为什么finger没有非零的返回值?

  6. 6

    SQL CASE,当值等于零时,从具有相同值的另一行返回值

  7. 7

    当lowBound设置为零时,为什么PulP为混合问题返回负值?

  8. 8

    实际上,为什么&&和||重载?不短路吗?

  9. 9

    当我将暗淡的长度设置为零时,为什么不会引起错误?

  10. 10

    返回值到innerHTML时,为什么函数内的innerHTML会被忽略?

  11. 11

    为什么我总是得到零时差?

  12. 12

    当组浮点值总计为0时,为什么SQL SUM()函数返回的总和不为零?

  13. 13

    为什么此函数不返回值?

  14. 14

    为什么此函数不返回值?

  15. 15

    mcc函数无法返回值,为什么?

  16. 16

    为什么没有从函数返回值?

  17. 17

    为什么打印函数名称会返回值?

  18. 18

    为什么这个简单的函数不返回值?

  19. 19

    为什么 Scrapy 不从函数返回值?

  20. 20

    为什么不对函数的返回值求值,而对宏的返回值求值呢?

  21. 21

    为什么异步函数返回值的承诺而不是直接返回值?

  22. 22

    当我们尝试将变量除以零时,为什么编译器没有显示错误

  23. 23

    ARM Assembly-将r7清零时,为什么我的应用程序崩溃?

  24. 24

    为什么声明返回值时我的函数没有结束(Node.js和Express.js)

  25. 25

    为什么当我使用函数返回值并崩溃浏览器时 *ngFor 会无限循环?

  26. 26

    pthread_mutex_lock()仅在将返回值分配给变量时起作用,为什么?

  27. 27

    为什么量角器有时返回承诺,有时返回值?

  28. 28

    除以零时保持旧值

  29. 29

    为什么Rust在主函数中没有返回值,以及无论如何如何返回值?

热门标签

归档