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

c 14 – 如何禁用实例化临时类?

发布时间:2020-12-16 07:23:44 所属栏目:百科 来源:网络整理
导读:我正在使用一个表达式模板类,它不应该被实例化以避免悬空引用.但我很想用auto声明一个变量,’auto’创建一个临时类的命名实例. 如何在以下代码中禁用临时类的自动声明? class Base{};class Temp : public Base{public: Temp() {} Temp(int,int) {} Temp(con
我正在使用一个表达式模板类,它不应该被实例化以避免悬空引用.但我很想用auto声明一个变量,’auto’创建一个临时类的命名实例.

如何在以下代码中禁用临时类的自动声明?

class Base
{
};

class Temp : public Base
{
public:
    Temp()         {}
    Temp(int,int) {}
    Temp(const Temp&) = default;
    Temp(Temp&&)      = default;
};

Temp testFunc(int a,int b) {
    return Temp{a,b};
}

int main() {
    Base a = testFunc(1,2); // this should work
    auto b = testFunc(1,2); // this should fail to compile
    return 0;
}

解决方法

您似乎想要阻止用户在特定类型上使用auto.这在任何版本的C中都是不可能的.如果用户写入T t =< expr>;是合法的C,其中T是< expr>的类型,那么用户写入auto t =< expr>; (忽略类数据成员).就像你不能禁止有人传递< expr>使用模板参数推导的模板函数.

您为防止自动使用而做的任何事情也会抑制该类型的其他一些用法.

(编辑:李大同)

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

    推荐文章
      热点阅读