gpt4 book ai didi

c++ - 在 C++ 中添加 double 和复数

转载 作者:可可西里 更新时间:2023-11-01 18:35:41 24 4
gpt4 key购买 nike

考虑这段代码:

#include <iostream>
#include <complex>

int main()
{
std::complex<double> z1 = 5;
std::cout << z1 - 1 << "\n"; // must change to z1 - 1.0 to compile

std::complex<int> z2 = 5;
std::cout << z2 - 1.0 << "\n"; // must change to z2 - 1 to compile
}

这会产生编译错误,因为没有 operator-在表达式 z1 - 1 中找到类型或 z2 - 1.0 .另一方面,更改这些表达式以使基本类型匹配可以正常工作。

天真地,为了z1 - 1我希望 int 1 晋升为 double ,并期望 z2 , 基类型 int , 在 z2 - 1.0晋升为complex<double> .怎么回事?

最佳答案

operator-您尝试调用的是具有单一类型模板参数的函数模板。

template< class T >
complex<T> operator-( const complex<T>& lhs, const T& rhs);

两个函数参数中的模板参数都没有出现在非推导上下文中,因此模板参数推导分别对两个参数执行,这导致 T for lhs 被推导为 double,而 rhs 被推导为 int

由于推导类型之间的这种不匹配,模板参数推导失败,您的代码无法编译。

关于c++ - 在 C++ 中添加 double 和复数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30656210/

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