加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 模板类构造函数的专门化

发布时间:2020-12-16 09:53:56 所属栏目:百科 来源:网络整理
导读:我是C语言模板的新手. 谁能解释为什么我的专用构造函数永远不会被执行. 它删除const和引用运算符时工作. #includeiostream#includestringusing namespace std;templatetypename Tclass CData{public: CData(const T); CData(const char*);private: T m_Data;
我是C语言模板的新手.
谁能解释为什么我的专用构造函数永远不会被执行.
它删除const和引用运算符时工作.

#include<iostream>
#include<string>

using namespace std;

template<typename T>
class CData
{
public:
    CData(const T&);
    CData(const char*&);
private:
    T m_Data;
};

template<typename T>
CData<T>::CData(const T& Val)
{
    cout << "Template" << endl;
    m_Data = Val;
}
template<>
CData<char*>::CData(const char* &Str)
{
    cout << "Char*" << endl;
    m_Data = new char[strlen(Str) + 1];
    strcpy(m_Data,Str);
}

void main()
{
    CData<int> obj1(10);
    CData<char*> obj2("Hello");
}

输出是

模板

模板

解决方法

因为你不能将“Hello”绑定到const char *&.

评论中添加的信息dyp非常有趣:

A string literal is an array lvalue,which can be converted to a pointer prvalue. A pointer prvalue cannot bind to a non-const lvalue reference like const char* &

这意味着您可以通过替换const char *&来实际使其工作.通过const char * const&,甚至const char *&&在第11节中,不确定这在你的用例中是否真的很聪明.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读