模板练习问题
Templates exercise problem
我试着做下面的练习,从思考在c++卷2,女巫说:
在下面的代码中,类NonComparable没有操作符=()。为什么类HardLogic会导致编译错误,而SoftLogic不会?
#include <iostream>
using namespace std;
class NonComparable {};
struct HardLogic {
NonComparable nc1, nc2;
void compare()
{
return nc1 == nc2;
}
};
template<class T>
struct SoftLogic {
NonComparable nc1, nc2;
void noOp() {}
void compare()
{
nc1 == nc2;
}
};
int main()
{
SoftLogic<NonComparable> l;
l.noOp();
return 0;
}
1) HardLogic::compare返回void,但函数尝试返回int/bool。
2) SoftLogic也有一些奇怪的东西(对我来说):nc1 == nc2。
3)练习说的是operator =(),但在代码中使用的是operator ==()。
这些是错误吗?我觉得很奇怪,像这样一本书里的代码竟然有这么多错误,我是不是错过了什么?有人以前遇到过这个练习吗?
因为编译器不需要诊断永远无法实例化为有效专门化的模板。只有在实例化时才需要对它们进行诊断。他们是否能更早地诊断出这些问题只是执行的质量问题。
对于类模板的成员函数也是如此。如果您尝试调用l.compare()
,编译器将需要实例化成员函数,并且需要诊断错误。
一个好的编译器在这两种情况下都会给出错误。
HardLogic::compare返回void,但函数尝试返回int/bool
由于所讨论的operator==
没有定义,因此您不知道它将返回什么。它可以返回void
,在这种情况下,return nc1 == nc2;
就可以了。
这些是错误吗?我发现像这样一本书的代码中有这么多错误是很奇怪的,所以我错过了什么
检查书中的勘误表页,如果存在的话。从你的描述中我可以看到,它至少包含一个错别字(operator=
vs operator==
)。
HardLogic::compare在prototype返回类型为空时返回bool值SoftLogic::compare在原型中返回void,不返回任何东西,这是完全OK的
- 警告处理为错误这里有什么问题
- 最小硬币更换问题(自上而下方法)
- 为"adjacent"变量赋值时出现问题
- 我的神经网络不起作用 [XOR 问题]
- 在Ubuntu 16.04上安装Cilk时出现问题
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 加速C++练习2.4
- 编译包含字符串的代码时遇到问题
- 返回不停止函数,递归函数问题?(编程练习,动态规划,Levenshtein 回溯)
- 尺寸数组 [矩阵] 练习的问题
- 循环练习时的问题
- 我正在尝试[C++]练习多态性和OOD原则。需要指导和几个问题的答案
- C++练习车辆程序问题 - 初学者编程
- 跳到C++第13章练习问题4-指针
- 在linux下练习编程的问题
- 练习的问题
- 跑步练习2-4的问题,来自学习Opencv,O'Reilly
- 简单的记忆问题练习
- 模板练习问题
- 按顺序显示字符串-练习问题