下标 [] 操作符的默认值是什么?

3

我希望我的数组类能够有PHP风格的push_back功能:

arrayT<int> arr;
arr[] = 10; // == std::vector::push_back()

并且

arrayT::operator[]( size_t pos = (size_t)-1)

这是否可能? 如果是,是否也可以使用其他运算符?

5
即使可能,这也会非常混乱和不符惯用语。使用独立的方法会更加明智。 - user395760
为什么会令人困惑呢? - Virus721
1
@Virus721 因为程序员喜欢他们熟悉的语法,所以这种写法对他们来说并不舒适。如果我在阅读一些 C++ 代码时看到了这样的写法,我会想:“这里到底是用了怎样的黑科技?”我得去读文档才能找出它的作用。然而,如果使用的是一个名叫 push_back 的函数,我就能立即明白它的含义了。 - Joseph Mansfield
1个回答

7

一个操作符函数不能有默认参数(8.3.6),除非在下面明确说明的情况下。

operator[] 应该是一个带有一个参数的非静态成员函数。

唯一允许有默认参数的操作符函数是 operator()。而且你不能声明 operator[] 不带参数。

所以,不,你所要求的是不可能的。


1
如果我没记错的话,你甚至不能重载它以不带参数的形式调用。 - StoryTeller - Unslander Monica
感谢您的帮助。 - Virus721
你可以将其包装在一个函数周围,该函数将默认值转发给它。 - David G

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接