Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/148.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++ 带有常量和引用的变量声明_C++_C++11_Constants - Fatal编程技术网

C++ 带有常量和引用的变量声明

C++ 带有常量和引用的变量声明,c++,c++11,constants,C++,C++11,Constants,我对带有引用的变量声明感到困惑。我读了几页,这让我更加困惑,所以我更愿意在这里提问 我在C++面试中被问了4个问题;哪一个是错的,为什么 (1) int & n; (2) const int & n=15; (3) float x; const int & n =x; 有人能解释一下哪个不正确以及为什么不正确吗?引用必须始终初始化。tl;dr引用必须在声明中进行初始化(直接或在类初始化中) 这使得引用n未初始化。参考文件必须在声明上草签 const int& n

我对带有引用的变量声明感到困惑。我读了几页,这让我更加困惑,所以我更愿意在这里提问

<>我在C++面试中被问了4个问题;哪一个是错的,为什么

(1) int & n;
(2) const int & n=15;
(3) float x; const int & n =x;

有人能解释一下哪个不正确以及为什么不正确吗?

引用必须始终初始化。

tl;dr引用必须在声明中进行初始化(直接或在类初始化中)

这使得引用
n
未初始化。参考文件必须在声明上草签

const int& n = 15;
这里没什么问题。对
const int
的引用被初始化为
15

float x; const int& n = x;

float
可以,但是不初始化是个坏主意。引用
n
被初始化为
x
(浮点/整数转换适用),这也不是一个好主意。

你的编译器告诉你什么?
c++访谈(我猜也是这样)
听起来像是有人在做什么。编译器没有给出原因的答案?(但如果你真的不想帮忙,没关系,那么你肯定会这样评论)@user3735822,我的编译器给出了一个非常清楚的解释。你说什么?这还不清楚吗?(向下滚动到编译信息并忽略警告)是的,但这不一定使
int&n错误。例如,当它与结构的其余部分一起初始化时,它将是结构的一个有效成员。@Jens感谢您的回答,但我想知道为什么在(3)FLOAT x中初始化时,它不会给出数据类型从FLOAT更改为INt的错误;常数int&n=x@hvd只要它与结构的其余部分一起初始化,它就始终被初始化。当您不在构造函数中初始化它时,您将得到一个编译器错误。@Jens Right。因此,您关于引用必须始终初始化的回答不一定适用于问题中的三个片段中的任何一个。这可能是第一个片段的预期答案,但如果是,那就意味着问题是错误的。@hvd为什么它不适用于第一个片段。问题是这三个片段中的哪一个是错误的,这将是给定原因的第一个片段。但是为什么它不给出初始化为int n作为参考的flotavariable的错误呢?(它做任何类型的转换吗?@user3735822。浮点-整数转换将适用。我不建议在一般意义上编写这样的代码。但是代码看起来是正确的,因此编译时不会出错。附加说明:
const&
将绑定到临时对象并延长临时对象的生命。@user3735822。如果将
const int&n=x
中的
const
删除到
int&n=x
(对于
浮点
情况);您将得到一个编译错误。@user3735822
int&n在类定义中是可以的。这完全取决于上下文。我相信这会让你在面试中获得加分。@juanchopanza你能告诉我int&n;工作正常。
float x; const int& n = x;