c++棘手的常量参考考试任务
C++ Tricky Const Reference Exam Task?
我正在为即将到来的考试做准备,有一个棘手的问题:
问题是:
代码有什么问题,它如何是正确的?
const long limit = 1000L; long &ref = limit;
现在我把它作为c++代码输入,发现引用(&)是这个代码示例中的错误,所以写long ref = limit解决了这个问题。然而,我想知道为什么这解决了问题。为什么?上面的代码有问题吗?
初始代码试图创建对const
变量的非const引用,这是不允许的。由于引用指向的是原始变量,因此给ref
赋值将(试图)修改limit
的值,这是不允许的,因为limit
是const
。
第二个函数创建一个变量,并使用const变量的值初始化该变量。
你也可以创建const: long const &cref = limit;
的引用
Whats wrong with the code and how would it be correct?
const long limit = 1000L;
long &ref = limit;
让这个例子更进一步:
ref = 1001L; // ooops! we just changed the value of limit
给引用赋值会修改原始变量,在本例中为const。为了避免这种可能性,编译器不允许你创建一个指向const值的非const引用。
我的答案是:
- 代码格式错误,因为它试图长&不能用const对象初始化,它要求左值类型为long。
- 最简单的解决方法是删除这一行,除此之外,你必须提供关于其目标的信息,为此我可以建议
相关文章:
- C++错误消息*成员参考.**初学者*
- 在决定是通过参考还是通过价值时,尺寸真的是一个问题吗
- 参考资源文件VC++中的$(SolutionDir)
- C++:Application.cpp中抛出了未解析的外部符号(解决方案在问题的末尾,供未来的读者参考)
- 为什么在运算符重载时需要参考?
- 使 \page 和 \subpage 参考 doxygen 中的方法文档
- std::shared_ptr 自定义参考计数器
- 英特尔 TBB 程序不会终止,可能会误用参考计数器
- 避免在基于反向范围的for循环实现中悬挂参考
- 通用参考 l 值不复制对象
- 标准::enable_if和通用参考的使用差异
- 标准::积累参考?
- C++丢失了参考
- 我可以有一个 ELI5 作为参考和指针以及何时使用它们吗?
- 矢量的通用参考
- 为什么"fun(i)"被推导出为"fun<int&>"而不是"fun<int>",因为"i"是"int"的类型而不是参考?
- C++17 和静态临时生存期的参考扩展
- C++ 参考:这两个语句有什么区别?
- 如何理解 C++17 标准参考中的 [intro.object]/3? N4659 的
- c++棘手的常量参考考试任务