这是我的示例代码:
#include <iostream>
#include <string>
using namespace std;
class MyClass
{
string figName;
public:
MyClass(const string& s)
{
figName = s;
}
const string& getName() const
{
return figName;
}
};
ostream& operator<<(ostream& ausgabe, const MyClass& f)
{
ausgabe << f.getName();
return ausgabe;
}
int main()
{
MyClass f1("Hello");
cout << f1;
return 0;
}
如果我注释掉#include <string>
我没有得到任何编译器错误,我想是因为它是通过包含的#include <iostream>
。如果我在Microsoft VS中“右键单击->转到定义”,它们都指向xstring
文件中的同一行:
typedef basic_string<char, char_traits<char>, allocator<char> >
string;
但是,当我运行程序时,出现异常错误:
OperatorString.exe中的0x77846B6E(ntdll.dll):0xC00000FD:堆栈溢出(参数:0x00000001,0x01202FC4)
知道为什么在注释掉时会出现运行时错误#include <string>
吗?我正在使用VS 2013 Express。
#include<iostream>
和<string>
可能都包括<common/stringimpl.h>
。
...\main.cpp(23) : warning C4717: 'operator<<': recursive on all control paths, function will cause runtime stack overflow
运行此行会产生警告cl /EHsc main.cpp /Fetest.exe