首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么在C++中使用元组不是更普遍呢?

为什么在C++中使用元组不是更普遍呢?
EN

Stack Overflow用户
提问于 2009-05-12 22:05:38
回答 10查看 56.2K关注 0票数 126

为什么似乎没有人在C++中使用元组,无论是Boost Tuple Library还是TR1的标准库?我读过很多C++代码,很少看到元组的使用,但我经常看到在很多地方,元组可以解决很多问题(通常从函数返回多个值)。

元组允许你做各种很酷的事情,像这样:

代码语言:javascript
复制
tie(a,b) = make_tuple(b,a); //swap a and b

这当然比这更好:

代码语言:javascript
复制
temp=a;
a=b;
b=temp;

当然,您总是可以这样做:

代码语言:javascript
复制
swap(a,b);

但是,如果您想要轮换三个值呢?您可以使用元组完成此操作:

代码语言:javascript
复制
tie(a,b,c) = make_tuple(b,c,a);

元组还使得从一个函数返回多个变量变得更容易,这可能是比交换值更常见的情况。使用引用来返回值肯定不是很优雅。

元组有没有什么我没想到的大缺点?如果不是,为什么很少使用它们?他们速度慢吗?或者仅仅是人们不习惯它们?使用元组是个好主意吗?

EN

回答 10

Stack Overflow用户

回答已采纳

发布于 2009-05-12 22:10:54

因为它还不是标准的。任何非标准的东西都有更高的门槛。一件件Boost变得流行起来,是因为程序员叫嚣着要它们。(hash_map跃入脑海)。但是,虽然tuple很方便,但它并不是那么压倒性和明显的胜利,人们会为它而烦恼。

票数 43
EN

Stack Overflow用户

发布于 2009-05-13 00:00:07

一个愤世嫉俗的答案是,许多人用C++编程,但不理解和/或使用更高级别的功能。有时是因为它们不被允许,但许多人只是不尝试(甚至不理解)。

举一个非boost的例子:有多少人使用<algorithm>中的功能

换句话说,许多C++程序员仅仅是使用C++编译器的C程序员,也许还有std::vectorstd::list。这就是为什么boost::tuple的使用并不普遍的原因之一。

票数 125
EN

Stack Overflow用户

发布于 2009-05-12 23:17:40

C++元组语法可能比大多数人想要的更加冗长。

考虑一下:

代码语言:javascript
复制
typedef boost::tuple<MyClass1,MyClass2,MyClass3> MyTuple;

因此,如果你想广泛使用元组,要么到处都是tuple typedefs,要么到处都是长得让人讨厌的类型名。我喜欢元组。我会在必要的时候使用它们。但它通常仅限于几种情况,如N元素索引或使用多映射来连接范围迭代器对。而且它通常在一个非常有限的范围内。

与Haskell或Python相比,它看起来非常丑陋和粗糙。当C++0x来到这里,我们得到了‘汽车’关键字元组将开始看起来更有吸引力。

元组的有用性与声明、打包和解包元组所需的击键次数成反比。

票数 23
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/855110

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档