【发布时间】:2018-04-28 16:32:53
【问题描述】:
在下面的代码中,我为数组下标运算符提供了默认参数。
struct st
{
int operator[](int x = 0)
{
// code here
}
};
但是,编译器产生了一个错误:
error: 'int st::operator[](int)' cannot have default arguments
int operator[](int x = 0)
但是,如果我为 函数调用 运算符提供默认参数。
struct st
{
int operator()(int x = 0)
{
// code here
}
};
一切正常。
所以,我有一个问题:
- 为什么不允许数组下标运算符的默认参数?
- 为什么函数调用运算符允许使用默认参数?
【问题讨论】:
-
因为函数调用可以有任意数量的参数,而数组下标总是有一个。
-
我无法想象“默认下标”有什么用处。
-
在这种情况下
x[]是什么意思? -
@molbdnilo:默认下标将使
some_array[]成为一个有效的表达式,并且可能允许像PHP 的$array[] = 'a new value tacked on to the end';这样的东西。
标签: c++ operator-overloading operators language-lawyer default-arguments