gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 11:55:18 26 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=)。因此,假设您正在像这样使用您的类(class):

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/984394/

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