gpt4 book ai didi

c++ - C++ 如何处理引用 int 的 const double&?

转载 作者:IT老高 更新时间:2023-10-28 22:08:55 24 4
gpt4 key购买 nike

今天早上我正在编写一些模板代码,我使用 BOOST_STATIC_ASSERT 来确保我没有创建对错误类型的引用,因为我认为这可能是一个更清晰的错误消息。但是,当我尝试删除静态断言以查看替代编译器错误时,我震惊地发现当您尝试使 const double& 引用 int 时 gcc 甚至没有提示:

#include <iostream>

int main()
{
int x = 5;
const double& y = x;
std::cout << y << std::endl;

return 0;
}

编译,甚至不警告:

$ g++ ~/stuff/badRef.cpp -Wall -Wextra -pedantic
$ a.out
5

这里发生了什么?这是未定义的行为吗?如果是这样,为什么 gcc 不提示?在我的机器上,int 是 4 个字节,double 是 8。这意味着当打印一个 double& 时,它应该将该地址的 8 个字节解释为一个 double 并打印它,但实际上在那个位置有一个 4 字节的 int。

非常困惑。救命!

最佳答案

const double& y = x;创建一个临时 double值为 static_cast<double>(x) , 然后将该临时绑定(bind)到 y .临时的生命周期被延长以匹配 y 的生命周期.

这是完全合法的 C++(03 和 11),因此没有警告/错误。

关于c++ - C++ 如何处理引用 int 的 const double&?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9121408/

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