Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将int赋值给double&;_C++_Reference - Fatal编程技术网

C++ 将int赋值给double&;

C++ 将int赋值给double&;,c++,reference,C++,Reference,我想了解为什么这不能编译: int main() { int a = 1; double& b = a; std::cout << b; } intmain() { INTA=1; 双b=a; std::coutAdouble和Aint在内存中有不同的对齐要求和表示形式。通过另一种类型的眼睛读取一个变量作为一种类型也会使程序具有未定义的行为 当你做这样的事情时 int a = 1; double b = a; // note, not a refe

我想了解为什么这不能编译:

int main()
{
    int a = 1;
    double& b = a;
    std::cout << b;
}
intmain()
{
INTA=1;
双b=a;

std::coutA
double
和A
int
在内存中有不同的对齐要求和表示形式。通过另一种类型的眼睛读取一个变量作为一种类型也会使程序具有未定义的行为

当你做这样的事情时

int a = 1;
double b = a;  // note, not a reference
然后将
a
隐式转换为临时
double
,然后分配给
b

double& b = a;
然后
b
尝试引用该临时
double
,这是无效的,因为临时值将在表达式末尾被销毁

但是,您可以通过使用
常量&
将临时变量的寿命延长到表达式末尾之外。然后,临时变量的寿命将延长到引用寿命的末尾(范围的末尾)

例如:

const double& b = a; // valid, but usually pointless

关于你对问题的补充:

使用
double const&b=a
而不是
double&b=a
可以正常工作


那只是因为“标准上这么说”一个临时的非代码> const和<代码>意味着你要对那个临时性的改变——这通常是个错误,你可能会想要一个<代码>双< />代码,而不是一个<代码>双和。在这种情况下,你想让程序做什么?因为类型不匹配。C++试图阻止你犯下一个大错误。ke.
twool&
如何引用
int
变量?!你确定你理解了什么是引用吗?即使
int
twool
大小相同,这样你就不会在读取
twool
变量时,比如32位
int
int
的字节编码也不会出错ense被解释为一个
double
。1)我的程序较长,但没有必要显示它,问题是这些行2)如果我使用双常量&=a,它会工作,所以我不理解为什么它使用常量工作,而不使用。3)我认为它会自动将a的类型从int转换为double感谢我对编程非常陌生o同样,最简单的事情对你来说也不是那么明显me@DavideLP不客气,我完全明白为什么这不明显。我只是注意到你添加了一个关于
const&
的内容,所以我在末尾添加了一个关于这一点的注释。为了扩展微妙的区别,
int a=5;int const&b=a;a=6;
现在b也是6。
int a=5;double const&b=a;a=6;
但b仍然是5.0,因为它是未命名临时文件的别名。@Eljay是的,很好的说明!