gpt4 book ai didi

c++ - 重载和模板相结合

转载 作者:行者123 更新时间:2023-11-28 08:12:20 25 4
gpt4 key购买 nike

下面的代码让我很困惑:

  1. 我期待 operator+<int>给出编译时间错误,因为运算符重载要求至少一种非固有类型。如果我尝试 int operator+(int i, int j)它失败。但这并没有造成任何问题,为什么?

  2. 如果我调用 2+3它不叫operator+吗,我必须明确地做 operator+<int> ?

  3. 除了写 operator+<int> 有没有更好的方法调用我对 operator+ 的定义?

  4. 有没有我可以引用的地方,哪个解释得更好?

注意:我使用的是“Sun C++ 5.10”

#include <iostream>

using namespace std;

template <typename T>
T operator+(T i, T j)
{
return i+j;
}

int main()
{
cout<<2+3;
cout<<operator+<int>(2,3);
cout<<endl;
}

输出如下,

bash-2.03$ ./a.out

55

最佳答案

我觉得问题的答案比较简单:是编译错误!相关引用是 over.op 第 6 段,第一句(C++2011):

An operator function shall either be a non-static member function or be a non-member function and have at least one parameter whose type is a class, a reference to a class, an enumeration, or a reference to an enumeration.

我用当前版本的 EDG 前端、g++ 和 clang++ 测试了您的代码,它们都正确地拒绝了代码。

关于c++ - 重载和模板相结合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8701066/

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