我有这个(有效的)代码:
char * ptr = new char[10];
cin >> ptr;
cout<<*(ptr+n)
的输出来自输入。
为什么cin>>ptr
起作用,不是cin>>*ptr
吗?
答案 0 :(得分:1)
cin >> ptr;
是此函数调用的语法糖:
operator >>(std::cin, ptr);
这应该更清楚地表明将有一个与名称operator >>
关联的过载集。确实,看着reference,我们看到例如这个:
template< class CharT, class Traits>
basic_istream<CharT,Traits>& operator>>( basic_istream<CharT,Traits>& st, CharT* s );
这是您正在调用的功能。它需要一个std::basic_istream
实例化(即std::cin
)和一个指向基础字符类型的指针(在您的情况下为ptr
),然后做正确的事情。
当您改为调用
operator >>(std::cin, *ptr);
您取消对char
数组的指针的引用,该数组返回对该数组第一个元素的引用。有一个重载可以接受对单个char
的引用(重载列表中的#1),但是它只能读取单个char
,仅此而已。除了第一个char
以外的其他输入都将被丢弃。