gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 04:36:13 26 4
gpt4 key购买 nike

我正在使用一个表达式模板类,它不应被实例化以避免悬空引用。但是我很想用 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++ 中都是不可能的。如果用户编写的 C++ 是合法的 T t = <expr>; ,其中 T<expr> 的类型, 那么用户写 auto t = <expr>; 是合法的(忽略类数据成员)。正如你不能禁止某人通过<expr>使用模板参数推导到模板函数。

采取任何措施来防止 auto用法还将禁止该类型的其他一些用法。

关于c++14 - 如何禁用实例化临时类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51717811/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com