c++ - auto的赋值可以不是r值表达式的结果吗?

标签 c++ operator-overloading c++17 c++20 conversion-operator

考虑以下:

auto tmp = a + b;

其中ab是用户定义的类型,它们返回代理对象以延迟求值(这是比所示更复杂的表达式所必需的)。

在这种情况下,是否有办法使运算符重载的结果类型不同于其他类型?

我想知道也许带有r / l值说明符T operator() &&的隐式转换运算符在这里可能有用,但是我不太想怎么做。

我很欣赏这个问题含糊不清,也没有细节,但是我认为我想要的概念非常简单。

如果我不想做auto tmp = ...而是some_concrete_type tmp = ...但在构造函数中使用了代理,我可以想到一种方法。

最佳答案

auto总是会从初始化程序中推断出其类型。除非您自己进行转换(除非它会删除顶级引用和简历资格),否则不会进行转换。

如果您的初始化表达式导致某种代理而不是具体类型,那么这就是auto的推论。

关于c++ - auto的赋值可以不是r值表达式的结果吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60403732/

相关文章:

c++ - 将整数数组转换为类数组

c++ - 如何打印 std::map<int, std::vector<int>>?

c++ - Switch 语句 C++ 的问题

c++ - 处理在 C++ 结构中更改的值

c++ - 专门化命名空间中的模板——命名空间别名真的是别名吗?

c++ - 错误: ambiguous overload for 'operator<<'

c++ - 合并两个 std::set 和(尚未) std::set::merge()

c++ - 在 C++11(或更新版本)中创建 RAII 包装器而无需编写新类的最短路径是什么?

C++ 如何使这段代码更高效?

c++ - 如何验证 vector 是否在某个索引处具有值