(点击上方公众号,可快速关注)

C++11标准库引入了元组(tuple),弥补了pair只能包含两个元素的缺点。简单来说,元组是一个固定大小的异构数据结构。“固定大小”这一点跟静态数组类似,定义之后大小就固定了,不能动态地扩展;“异构”与“同构”相对,如,最常见的数组是同构的,是因为只能包含相同数据类型的元素,而异构则没有这个限制,可包含不同数据类型的元素。

元组中的元素是没有名字的,要访问其中的元素需要知道元素的位置,要时刻记得元素的位置,这导致元组并不一定适用于任何场景。但元组非常适合创建一些具有“共识”的结构,比如,包含坐标(x,y)的元组,肯定没人误以为是(y,x),同样颜色模型(R,G,B)也不会有人弄混。所以,元组要恰当地使用,否则会给后期的维护带来很大的麻烦。

下面进入正题。

VS 2012元组的限制

理论上,元组的大小是没有限制的,但实际的实现可能会有所取舍,普通用户应该不至于超出限制。近期遇到了一个情况,在使用make_tuple创建元组对象的时候,总是报错,环境是VS 2012。

一开始以为是代码的问题,检查了好几遍发现没问题。所以,写了非常简单的测试程序,在VS 2012下运行报同样的错误:

【现代C++】VS 2012标准库tuple的限制

而在高版本的编译器是没有这个错误的,问题原因是编译器对标准支持不完善所导致。

虽然这些年一些著名的C++编译器对标准的支持力度增加了,但相比其他语言,仍然不让人满意。比如,Java语言,每个版本的Java SDK发布都完全支持标准,根本不需要担心某个语言特性或功能没有被支持。而写C++程序的时候,使用C++11的特性写代码,好多2011年后的编译器并没有完全支持C++11,只能绕开走。所以写程序化,尽量使用高版本的编译器,但现代C++在国内的普及并不好,这是后话了。

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-08-06
  • 2021-06-26
  • 2022-12-23
猜你喜欢
  • 2021-12-19
  • 2021-05-24
  • 2021-04-12
  • 2022-02-12
  • 2021-09-27
  • 2021-05-25
相关资源
相似解决方案