C++ 对于ofstream,但对于ostream,警告不明确。什么';有什么区别?
这并不重要。但我很好奇这个警告何时出现。我真正的问题是为什么ostream和ofstream受到不同的对待C++ 对于ofstream,但对于ostream,警告不明确。什么';有什么区别?,c++,compiler-warnings,C++,Compiler Warnings,这并不重要。但我很好奇这个警告何时出现。我真正的问题是为什么ostream和ofstream受到不同的对待 struct Test { int y; Test(int k) : y(k) {} }; 通过这个简单的结构,编译器可以将int转换为测试 因此,我得到一个警告,代码如下: std :: ofstream& operator<< (std :: ofstream& os, const Test& t) { os <&l
struct Test {
int y;
Test(int k) : y(k) {}
};
通过这个简单的结构,编译器可以将int
转换为测试
因此,我得到一个警告,代码如下:
std :: ofstream& operator<< (std :: ofstream& os, const Test& t)
{
os << t.y;
return os;
}
std::ofstream&operator正如警告告诉您的,对于ofstream
两种解释都需要转换:
调用时,在os的static_-cast(os)测试中执行流的&->ostream&
os << t.y;
os我花了大约10秒的时间才发现示例1和示例3之间的差异(*o*stream
vs*of*stream
),这很有意义。但考虑到ofstream继承自ostream,您可能会认为这样的转换将更加自然。ofstream继承运算符
os << t.y;
ostream& operator << (ostream&, int) //1
ofstream& operator << (ofstream&, Test) //2
ofstream& operator << (ofstream&, int) //3