首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >错误:请求从‘基本类型’到非标量类型'NamedType<fundamental type>‘的转换

错误:请求从‘基本类型’到非标量类型'NamedType<fundamental type>‘的转换
EN

Stack Overflow用户
提问于 2019-05-26 19:22:45
回答 1查看 29关注 0票数 0

我有以下结构(足够简单,可以重复这个问题):

代码语言:javascript
复制
template < class T, class P = struct NamedTypeDefaultTag > struct NamedType
{
    //static_assert(std::is_fundamental_v< T >, "Template parameter is not a fundamental type.");

    using ValueType = T;

    ValueType m{};

    constexpr NamedType() noexcept = default;
    constexpr NamedType(const NamedType & value) noexcept = default;
    constexpr NamedType(NamedType && value) noexcept = default;

    constexpr explicit NamedType(const T & value) noexcept : m{value} { }

    constexpr NamedType & operator = (const T & value) { m = value; return *this; }
};

然后我尝试像这样使用赋值运算符:

代码语言:javascript
复制
int main() {
    using NT_t = NamedType< int >;

    // generates error
    int t = 1;
    NT_t a = t;
    const NT_t b = 2;
    // works fine
    NT_t c;
    c = 2;

    return 0;
}

我怀疑这是因为我同时声明并赋值它,它以某种方式试图使用构造函数(这是显式的)。

但我不明白是什么导致了它,也不知道如何绕过它。

EN

回答 1

Stack Overflow用户

发布于 2019-05-27 03:31:20

NT_t a = t;尝试从intNT_t的隐式转换。但是,能够执行此类转换的构造函数被标记为explicit,因此无法在隐式转换中使用它。搞定

代码语言:javascript
复制
NT_t a{t};
const NT_t b{2};
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56313049

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档