为什么没有报重定义错误?

femalelover 2007-10-12 10:12:02
半年没碰代码,发现自己比以前还要菜了.

代码:
#include <iostream>
#include <cmath>
using namespace std;

double __cdecl sin(__in double _X) //这里不会与库中的sin冲突.
{
return 1.0;
}
int main()
{
int cout; //这里也不会与ostream cout冲突.
sin(1.0);
return 0;
}

上面的sin函数原形是从<cmath>中直接拷贝过来的, 定义之后, 没有任何错误.

大侠来说说为什么上面的sin, cout不会有名字冲突, 谢谢.
...全文
112 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
HULIHONG 2007-10-13
  • 打赏
  • 举报
回复
挺逗的10楼大哥,又可以学到新知识了,谢谢你们。
飞哥 2007-10-13
  • 打赏
  • 举报
回复
美女砍头了,马宏疯掉了,连T-bag都不掏兜兜了,只有一个恶心肉包子光着腚走来走去。。。

有人说了,都是名字空间的原因,因为他们不在同一名字空间,所以不会存在冲突问题

jixingzhong 2007-10-13
  • 打赏
  • 举报
回复
呵呵
ytfhwfnh 2007-10-13
  • 打赏
  • 举报
回复
但是,当你这样做了之后。直接调用sin()或使用cout变量,就会产生编译错误,除非使用域操作符指名使用哪个std::sin()或者::sin()。
ytfhwfnh 2007-10-13
  • 打赏
  • 举报
回复
因为cout和sin()都定义在std名字空间内,而你定义的cout、sin()都在无名字空间内。
它们是:std::cout;std::sin();
你定义的是:::cout;::sin();

有了名字空间这种好东西,名字冲突就可以很好的避免了。
femalelover 2007-10-12
  • 打赏
  • 举报
回复
why?
femalelover 2007-10-12
  • 打赏
  • 举报
回复
the one supplied by compiler 's verder?
0黄瓜0 2007-10-12
  • 打赏
  • 举报
回复
这样定义一cout就会重定义了:
namespace std
{
int cout;
}
lddLinan 2007-10-12
  • 打赏
  • 举报
回复
If you define your own version of some C/C++'s standard lib function, compiler should choose yours over the one supplied by compiler's verder.

About cout, it's just a namespace issue.
0黄瓜0 2007-10-12
  • 打赏
  • 举报
回复
cout是局部变量屏蔽全局变量.
星羽 2007-10-12
  • 打赏
  • 举报
回复
inline long double __CRTDECL sin(__in long double _X)

64,663

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧