gpt4 book ai didi

c++ - 我编译了这段看似不正确的代码,但我不明白为什么

转载 作者:行者123 更新时间:2023-11-30 01:35:46 31 4
gpt4 key购买 nike

我正在 linux 机器上学习 C++。我刚刚尝试了“int i();”声明一个函数,但我忘了定义它。但是出乎意料的是,这段代码可以编译输出1,感觉很迷茫。我试过“int I{};”,它仍然编译没有错误。请帮忙解释一下。提前致谢。

 //test1.cpp
#include <iostream>
int main(void)
{
int i{};
std::cout << i << std::endl;
return 0;
}

g++ test1.cpp
./a.out
Output is: 0

//test2.cpp
#include <iostream>
int main(void)
{
int i();
std::cout << i << std::endl;
return 0;
}

g++ test2.cpp
./a.out
Output is : 1

最佳答案

在您的第一个示例中,您定义了一个名为 i 的变量,并对其进行了值初始化,对于 int 而言,这意味着零初始化。

int i{}; // defines i, initialised to zero

在你的第二个例子中,你声明了一个名为 i 的函数,它没有参数,并返回 int:

int i(); // declares a function

打印时:

std::cout << i << std::endl;

i 首先转换为 bool(i 衰减为函数非 nullptr 指针,然后变为 true),然后打印为一个整数,这就是为什么你得到 1。编译器可以在没有 i 定义的情况下进行此转换(因为结果始终为 true),这就是您没有链接器错误的原因。

如果您的目的是调用此函数并打印结果,则需要使用 i():

std::cout << i() << std::endl;

这当然需要i的定义。

关于c++ - 我编译了这段看似不正确的代码,但我不明白为什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53272984/

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