gpt4 book ai didi

c++ - 隐式模板参数

转载 作者:IT老高 更新时间:2023-10-28 21:40:35 26 4
gpt4 key购买 nike

以下代码在 Xcode 中生成编译错误:

template <typename T>
struct Foo
{
Foo(T Value)
{
}
};

int main()
{
Foo MyFoo(123);
return 0;
}

error: missing template arguments before 'MyFoo'

更改 Foo MyFoo(123);Foo<int> MyFoo(123);解决了这个问题,但编译器不应该能够找出适当的数据类型吗?

这是编译器的错误,还是我误解了隐式模板参数?

最佳答案

构造函数理论上可以推断出它正在构造的对象的类型,但是语句:

Foo MyFoo(123);

正在为 MyFoo 分配临时空间,并且必须知道 MyFoo 的完全限定类型才能知道需要多少空间。

如果您想避免输入(即用手指)特别复杂的模板的名称,请考虑使用 typedef:

typedef std::map<int, std::string> StringMap;

或者在 C++0x 中,您可以使用 auto 关键字让编译器使用类型推断——尽管许多人会认为这会导致代码可读性降低且更容易出错,我自己就是其中之一. ;p

关于c++ - 隐式模板参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4947294/

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