"operator int&() { return i; } "在代码中做什么
What is "operator int&() { return i; } " doing in the code
我在Stack Overflow中遇到了这段代码。我对operator int&() { return i; }
在代码中实际做什么感到困惑。
#include <iostream>
#include <conio.h>
using namespace std;
class INT {
public:
INT(int ii = 0) : i(ii) {}
operator int&() { return i; }
void display()
{
cout << "value of i is : " << i;
}
private:
int i;
};
int main()
{
INT l;
cin >> l;
l.display();
getch();
return 0;
}
我添加显示功能只是为了获得一些见解。我看到我从cin >> l;
获得的值被分配给i
它是对象l
的私有成员。所以这是我猜肯定是某种超载。
你能告诉我我们可以直接从cin
中获取类对象的值吗?它工作正常吗?
如果我在class INT
的私人部分有两个int
变量怎么办?
operator int&() { return i; }
在代码中做什么?
它是一个转换运算符;它接受一个INT
对象并返回对int
类型的引用。
每当编译器可以匹配函数参数等时,始终允许一个隐式转换。
因此,每当有一个函数接受int
但将INT
实例传递给它时,编译器就会使用此转换运算符将INT
转换为int
,以便进行适当的转换并且可以调用函数。
这种转换有什么用。它们在实际代码中有用吗?
如第一个答案中所述,每当代码需要大量隐式转换时,这很有用。
请注意,如果没有这样的功能,则必须提供返回适当类型的特殊成员函数,并且用户必须显式调用它们;这是大量的编码开销,此功能可以避免这种情况。
你能告诉我我们可以直接从
cin
中获取类对象的值吗? 它工作正常吗?
为了使cin>>l
发挥作用, l
应属于数据类型 cin
的 >>
运算符重载的数据类型 ( istream
(
请注意,对于大多数内置数据类型,>>
都是重载的,因此您可以直接使用 cin>>i
,用于i
int
或float
等类型。
但是,在您的示例中, l
属于 INT
类型,并且>>
运算符不会重载INT
数据类型。当然INT
是你的自定义类,标准C++库实现在实现>>
重载时无法知道它,因此它不存在重载。
由于没有可用的>>
重载版本,因此不能直接使用 >>
,编译器将返回无匹配函数的错误。
您必须提供一个过载>>运算符作为独立的功能,接收INT
,才能使用cin>>l
。
std::istream& operator>>(std::istream& is, INT& obj)
{
}
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 这个指针和内存代码打印是什么?我不知道是打印垃圾还是如何打印我需要的值
- 0-1背包代码中的错误.我的代码中有什么错误
- 我是C++编程的新手,这些代码之间有什么区别,我应该使用哪一个
- 不确定要在我的main中放入什么才能使我的代码正常工作
- 这行代码在C++类中意味着什么
- 使用不同的CRT将新的C++代码与旧的(二进制)组件隔离开来的最佳方法是什么
- 当无法使用模板和宏时,生成类型变体C++代码的最简单方法是什么?
- 我可以做些什么来消除或最小化这种将提供相同功能和行为的代码重复
- 以下 C++ 代码用于 -> "#define idiv(a, b) (((a) + (b) / 2) / (b))" 是什么?
- 这个带有模板<类 Vector 的C++代码片段有什么问题>
- 此代码中的操作流程是什么?C/C++.
- 当我从下面的代码中删除关键字 virtual 时,它可以正常工作,否则会出现错误。在这里"virtual"字的意义是什么?
- 此代码验证公式是什么意思?
- 需要以下代码的帮助,下面的代码有什么问题
- C++标准提案代码:什么是 N 和 P?
- C - 哈希算法代码什么都没有返回
- 将"12345678"转换为"1-234-5678",我的代码什么也没产生
- 在编译过程中,琐碎的(没有效果的)代码什么时候会被删除
- 有人能告诉我为什么这个代码什么都不打印吗