gpt4 book ai didi

c++ - 有没有允许重载运算符优先级的语言?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:52:15 25 4
gpt4 key购买 nike

考虑这个 C++ 代码:

struct A {
A operator*(A a) { return A(); } // A*A -> A
};
struct B {
A operator*(B b) { return A(); } // B*B -> A
};

int main() {
A t2 = B()*B() * A(); // works
A t1 = A() * B()*B(); // errors
return 0;
}

A*B 是不允许的,但是 B*B 是。是否存在根据变量类型选择运算符优先级规则的语言?

最佳答案

原来我原来的问题其实可以用C++表达:

struct A {
friend A operator*(A const& a1, A const &a2) { return A(); } // A*A -> A
};
struct B {
friend A operator*(B const& a, B const &b) { return A(); } // B*B -> A
};

template<typename A, typename B>
struct unresolved_multiply {
A const& a;
B const& b;
};

template<typename A, typename B>
unresolved_multiply<A, B> operator*(A const& a, B const &b) {
return {a, b};
}

template<typename A, typename B, typename C>
auto operator*(unresolved_multiply<A, B> const& ab, C const &c) {
return ab.a * (ab.b * c);
}

int main() {
A t1 = B()*B() * A(); // works
A t2 = A() * B()*B(); // works
A t3 = (A() * B())*B(); // works...
return 0;
}

当然,像这样无视括号是个糟糕的主意。

关于c++ - 有没有允许重载运算符优先级的语言?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26407643/

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