gpt4 book ai didi

c++ - c++ operator []可以使用多个参数很好地编译,有没有办法避免这种情况?

转载 作者:行者123 更新时间:2023-12-02 10:52:56 25 4
gpt4 key购买 nike

如果我有

int arr[10] = { 1,2,3,4,5 };
std::cout << arr[1,4] << "\n";

该代码可以正常编译并返回5(arr [4])。即使在不同类中对operator []进行重载也是如此。换句话说,如果我有:
class A{
public:
int operator[](int i) {return i;}
}

A a;
std::cout<<a[1,4];

我将得到4(a [4])。没有编译问题。在这种情况下,是否可以通过编译错误来避免潜在的错误?

最佳答案

您在这里看到的是comma operator的运行情况。计算左运算符,其结果被舍弃,表达式的结果为右运算符。

Is there a way to avoid potential errors by a compilation error in such cases?



嗯..您可以为索引选择一个自定义类型,并重载其逗号运算符。但是,这是 not recommended

相反,请注意您的编译器警告。例如,gcc -Wall警告此代码:
int main(){
int x = (1,2);
}


<source>:4:14: warning: left operand of comma operator has no effect [-Wunused-value]

4 | int x = (1,2);

| ^

关于c++ - c++ operator []可以使用多个参数很好地编译,有没有办法避免这种情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61391426/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com