gpt4 book ai didi

c++ - int i = i ^ i 的值;它总是零或未定义的行为吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:54:49 24 4
gpt4 key购买 nike

在下面的程序中,输出总是为零,还是未定义的行为?

#include<iostream>

int main()
{
int i= i ^ i ;
std::cout << "i = " << i << std::endl;
}

用gcc 4.8.0编译成功,输出0。

最佳答案

int i= i ^ i ;

由于 i 是一个自动变量(即它在automatic 存储期限内声明),它(静态)初始化但您正在读取它的值以(动态地)初始化它。因此,您的代码会调用未定义的行为。

如果您在命名空间级别声明 i 或声明为 static,那么您的代码就没问题了:

  • 命名空间级别

    int i = i ^ i; //declared at namespace level (static storage duration)

    int main() {}
  • 或者在本地定义为static:

    int main()
    {
    static int i = i ^ i; //static storage duration
    }

这两个代码都很好,因为 i静态初始化的,因为它是在 static 存储持续时间内声明的。

关于c++ - int i = i ^ i 的值;它总是零或未定义的行为吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17485814/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com