【问题标题】:Conversion operator for class type?类类型的转换运算符?
【发布时间】:2013-01-23 18:22:38
【问题描述】:

对于算术类型T,可以有一个包含转换运算符的类:

template <typename T>
class Value
{
    constexpr operator T() const;
};

这个operator 是否适用于所有类型(例如,它是否适用于T = std::vector&lt;double&gt;?)如果不是,它适用于哪些类型

【问题讨论】:

  • 您是否尝试过T 的不同值?结果如何?
  • 请注意,转换运算符仅定义为 与您的类实例相同的 T。例如,Value&lt;int&gt; 具有 int 的转换运算符,仅此而已。
  • 我认为它应该适用于任何T,也许在某些情况下您根本无法期望执行隐式转换(例如,缩小初始化列表中的转换),但那是不是因为目标类型本身的任何特殊性。所以总而言之,我很想回答“是”,但我心中那 1% 的怀疑阻止了我这样做。哦,std::inizialier_list&lt;X&gt; 可能不是合格的T

标签: c++ casting c++11 operator-overloading operator-keyword


【解决方案1】:

类型就是类型:你可以做的事情很少 内置类型,并且没有适当定义的用户 定义的类型。在这种情况下,唯一真正的要求是 该类型是可复制的(并且您有某种方式 在实现中构建它)。

顺便说一句,我想你的意思是:

class Value
{
    template <typename T>
    constexpr operator T() const;
};

(除了对于很多类型,它不会真正用作 constconstexpr 或否)。

【讨论】:

    猜你喜欢
    • 2014-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-21
    • 1970-01-01
    相关资源
    最近更新 更多