根据定义
char *str = "ankit"
这里str
是指向char的指针。
当我们做类似的事情
cout<< str;
然后它正在打印ankit。为什么不存储ankit的地址,因为str
是一个指针,所以它必须是一个地址
我尝试打印*str
,结果为“ a”;我可以理解,但我不明白为什么为什么打印str时不给出指针而是字符串值。
char * str = "ankit";
cout<< str;
输出:ankit
答案 0 :(得分:1)
对于char *
和T *
,ostream具有不同的重载(对于模板类型T
)。
来自<ostream>
头文件:
template <class _Traits>
inline basic_ostream<char, _Traits>& operator<<(basic_ostream<char, _Traits>& _Ostr,
const char* _Val) { // insert NTBS into char stream
template <class _Ostr, class _Ty,
enable_if_t<conjunction_v< // prevent infinite recursion
negation<is_lvalue_reference<_Ostr>>, is_base_of<ios_base, _Ostr>, _Can_stream_out<_Ostr, _Ty>>,
int> = 0>
inline _Ostr&& operator<<(_Ostr&& _Os, const _Ty& _Val) { // insert to rvalue stream
如果给出了已知的C字符串,则将使用接受char *
参数的函数。
如果不可用,则将使用另一个接受任意指针值的函数。
还有一种接受void *
指针的方法。