gpt4 book ai didi

c++ - 为什么不从构造函数中推断模板参数?

转载 作者:太空宇宙 更新时间:2023-11-04 13:01:23 25 4
gpt4 key购买 nike

我今天的问题很简单:为什么编译器不能从类构造函数中推断出模板参数,就像它可以从函数参数中推断出来一样?例如,为什么以下代码无效:

template <typename obj>
class Variable {
obj data;
public:
Variable(obj d) { data = d; }
};

int main() {
int num = 2;
Variable var(num); // would be equivalent to Variable<int> var(num),
return 0; // but actually a compile error
}

正如我所说,我知道这是无效的,所以我的问题是为什么不是这样吗?允许这样做会造成任何主要的句法漏洞吗?是否存在不想要此功能的实例(推断类型会导致问题)?我只是想了解允许对函数进行模板推断的逻辑,而不是对适当构造的类进行推断的逻辑。

最佳答案

我认为这是无效的,因为构造函数并不总是类的唯一入口点(我说的是复制构造函数和 operator=)。所以假设你像这样使用你的类:

MyClass m(string s);
MyClass *pm;
*pm = m;

我不确定解析器知道 MyClass pm 是什么模板类型是否会如此明显;

不确定我说的是否有道理,但请随意添加一些评论,这是一个有趣的问题。

C++ 17

C++17 将对构造函数参数进行类型推导已被接受。

例子:

std::pair p(2, 4.5);
std::tuple t(4, 3, 2.5);

Accepted paper .

关于c++ - 为什么不从构造函数中推断模板参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44119866/

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