从C ++ 11开始,我们可以编写lambdas,例如:
auto foo = [a, b]() { return a+b; };
带有方括号的捕获子句,其中的项目用逗号分隔。在C ++ 17中,我们将能够使用结构化绑定:
for (const auto& [name, description] : planet_descriptions) {
std::cout << "Planet " << name << ":\n" << description << "\n\n";
}
这是逗号分隔的方括号子句的另一个例子。
然而,我们无法覆盖一个班级&#39; operator[]
取几个参数,例如这样:
template<typename V, typename I, typename J>
const V& operator[](I i, J j) const {
return data_[width() * i + j];
}
将https://github.com/tgdwyer/WebCola/wiki/link-lengths。
我知道有一些解决方法 - 很多都在这里提到:
但是 - 为什么这种语言的前一部分,而后者不可能,甚至作为程序员自由裁量权的过载?是因为没有人提出其他建议,还是有某些具体原因呢?
备注:
operator[]
时使用逗号运算符产生歧义/不兼容性:x[a, b]
可能是operator[](operator,(a,b))
或operator[](a,b)
。但是,我们在圆括号中有一些相同的含糊之处:foo(a,b)
可能是对foo()
和a
的二元b
的调用,或者它可能是{{} 1}}。语言标准只是规定它是前者而不是后者(或前者应该是首选);方括号可以规定相同的优先权。事实上,如果我没有弄错,那么实际上不会破坏任何现有代码 - 因为现有代码不会优先使用二进制文件foo(operator,(a,b)
。operator[]
只是一个示例,而不是我想要实现的内容。