为什么似乎没有人在C++中使用元组,无论是Boost Tuple Library还是TR1的标准库?我读过很多C++代码,很少看到元组的使用,但我经常看到在很多地方,元组可以解决很多问题(通常从函数返回多个值)。
元组允许你做各种很酷的事情,像这样:
tie(a,b) = make_tuple(b,a); //swap a and b
这当然比这更好:
temp=a;
a=b;
b=temp;
当然,您总是可以这样做:
swap(a,b);
但是,如果您想要轮换三个值呢?您可以使用元组完成此操作:
tie(a,b,c) = make_tuple(b,c,a);
元组还使得从一个函数返回多个变量变得更容易,这可能是比交换值更常见的情况。使用引用来返回值肯定不是很优雅。
元组有没有什么我没想到的大缺点?如果不是,为什么很少使用它们?他们速度慢吗?或者仅仅是人们不习惯它们?使用元组是个好主意吗?
发布于 2009-05-12 22:10:54
因为它还不是标准的。任何非标准的东西都有更高的门槛。一件件Boost变得流行起来,是因为程序员叫嚣着要它们。(hash_map跃入脑海)。但是,虽然tuple很方便,但它并不是那么压倒性和明显的胜利,人们会为它而烦恼。
发布于 2009-05-13 00:00:07
一个愤世嫉俗的答案是,许多人用C++编程,但不理解和/或使用更高级别的功能。有时是因为它们不被允许,但许多人只是不尝试(甚至不理解)。
举一个非boost的例子:有多少人使用<algorithm>
中的功能
换句话说,许多C++程序员仅仅是使用C++编译器的C程序员,也许还有std::vector
和std::list
。这就是为什么boost::tuple
的使用并不普遍的原因之一。
发布于 2009-05-12 23:17:40
C++元组语法可能比大多数人想要的更加冗长。
考虑一下:
typedef boost::tuple<MyClass1,MyClass2,MyClass3> MyTuple;
因此,如果你想广泛使用元组,要么到处都是tuple typedefs,要么到处都是长得让人讨厌的类型名。我喜欢元组。我会在必要的时候使用它们。但它通常仅限于几种情况,如N元素索引或使用多映射来连接范围迭代器对。而且它通常在一个非常有限的范围内。
与Haskell或Python相比,它看起来非常丑陋和粗糙。当C++0x来到这里,我们得到了‘汽车’关键字元组将开始看起来更有吸引力。
元组的有用性与声明、打包和解包元组所需的击键次数成反比。
https://stackoverflow.com/questions/855110
复制相似问题