fre*_*low 5 c++ arrays comparison boost type-safety
我正在实现我自己boost::array的乐趣和教育变体,我只是想知道:应该比较两个不同大小的数组产生错误,还是应该是类型错误?
array<int, 3> a = {1, 2, 3};
array<int, 5> b = {1, 2, 3, 4, 5};
a == b // <--- false or type error?
Run Code Online (Sandbox Code Playgroud)
它应该是类型错误.使用的人boost::array选择它,std::vector因为他们想要在编译时而不是运行时进行评估(和失败).
在该语言中,不同的模板实例化是不相关的类型。这意味着从技术上讲,最简单的事情就是 boost::array 所做的:忽略这个问题,如果您尝试比较不同的大小,编译器会大喊大叫。
我倾向于回答这取决于您正在建模的域,但考虑到数组大小是编译时间常数,用户应该知道两个数组是不同的,甚至不需要尝试比较。即使在模板化代码中,只要有一个大小参数,一切都会自行到位。