目前,我们只能使用一个参数来重载operator[]
。
我想知道标准不允许为多个参数重载operator[]
的根本原因。
是否有关于在C++17中提出此类建议的计划?
目前,我们只能使用一个参数来重载operator[]
。
我想知道标准不允许为多个参数重载operator[]
的根本原因。
是否有关于在C++17中提出此类建议的计划?
这可能可以添加,但不应该添加,因为它会破坏现有的代码。
基本上,多个参数传递给operator[]
意味着以下内容将会编译:
struct Foo
{
int operator[](int a, int b, int c)
{
return 0;
}
}
int main()
{
Foo foo;
auto n = foo[1, 2, 3]; // list of parameters
}
int main()
{
Foo foo;
std::vector<int> bar(4, 0);
auto n = foo[1, 2, 3]; // list of parameters
auto x = bar[1, 2, 3]; // comma operator! returning the 3rd element of bar. valid syntax
}
struct Foo
{
int operator[](int a, int b, int c)
{
return 0;
}
int operator[](int a)
{
return 1;
}
}
1, 2, 3
的歧义。这意味着:如果标准更改以允许此操作,则在调用operator[]
时使用逗号运算符的任何代码都将变成编译错误。标准委员会尽力不破坏现有代码(这是一件好事!)引入新功能。在我看来,这将是一个相当激进的变化,因此不太可能实现。operator()
),或传递std::tuple
或等效物。
operator()
的根本原因是什么? - PeterT