gpt4 book ai didi

C++ 模板 : implicit conversion, 没有匹配函数来调用 ctor

转载 作者:太空狗 更新时间:2023-10-29 19:41:11 25 4
gpt4 key购买 nike

template<class T>
class test
{
public:
test()
{
}

test(T& e)
{
}

};

int main()
{

test<double> d(4.3);

return 0;
}

使用 g++ 4.4.1 编译,出现以下错误:

g++ test.cpp -Wall -o test.exe
test.cpp: In function 'int main()':
test.cpp:18: error: no matching function for call to 'test<double>::test(double)
'
test.cpp:9: note: candidates are: test<T>::test(T&) [with T = double]
test.cpp:5: note: test<T>::test() [with T = double]
test.cpp:3: note: test<double>::test(const test<double>&)
make: *** [test.exe] Error 1

但是,这是可行的:

double a=1.1;
test<double> d(a);

为什么会这样?g++ 是否有可能无法将文字表达式 1.1 隐式转换为 double?谢谢。

最佳答案

您将 double 1.1 传递给非常量引用 T&。这意味着您必须将有效的左值传递给构造函数,例如:

double x = 4.3;
test<double> d(x);

使构造函数采用 const 引用 (const T&) 并且它可以工作,因为您可以将临时值(右值)绑定(bind)到 const 引用,而 4.3 在技术上是一个临时 double 值。

关于C++ 模板 : implicit conversion, 没有匹配函数来调用 ctor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2628646/

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