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>使用模板参数推导的模板函数.
您为防止自动使用而做的任何事情也会抑制该类型的其他一些用法. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |