一个简单std::cout 引出的学习
来源:互联网 发布:淘宝客双十一怎么赚钱 编辑:程序博客网 时间:2024/06/06 02:39
在很简单的window console程序中,我写出了cout<< 语句。结果给出了错误的提示。Compiler Error C2065
cout没有定义。我也Includes <iostream>了,这是为何?
原来这里边涉及到了命名空间的问题。
在命名函数,类,全局变量,等等的时候,我们常常担心,自己的命名会和别人的发生冲突,这也是对于大型程序设计的一个困扰,如果两个程序员给出两个库,结果用到了一样的函数命名,那么就会造成很头疼的事情。是让谁去改名字,还是不用库了呢?所以需要在自己的函数定义之前,加入新的命名空间。比如:
namespace myname
{
int Add(int, int);
}
那么在以后的调用过程中就可以 myname::Add,这样就消除了和别人命名同样的函数了。
当然,也可以在程序的一开始就 using namespace myname,但是,这样与引入命名空间的初衷有些抵触。
1. 命名空间可以嵌套使用。
2. 可以给命名空间赋值,生成别名的名字空间;
3. Koening查找算法
其思想就类似与this指针的味道。比如 std::cout<< ,我们的std::cout是已经声明了命名空间,那么调用<<,就是调用了
std::operator<<(std::ostream&, const char* ). 再比如:
namespace personal{
class employee {};
void paycheck(employee *emp)
{
.....
}
int main()
{
personal::employee empl;
paycheck(&empl);
}
虽然paycheck是在personal中声明,只要paycheck函数的实参中包含了命名空间的信息,函数名称前就可以不用指定名字空间。
但是,如果paycheck(0), 编译器就无从选择要调用的函数了。
我的另外一个思考是:命名空间是和动态库的关系需要区分的,动态库的调用是有隐式调用,和显式调用的区分。显示调用不用说了,
有它的调用规则。那么隐式调用和命名空间有哪些关联呢?我觉得可以思考,是不是在import中可以加入namespace呢?当然不可以
它会不知道namespace的意思。不管怎么说,这一点是需要继续学习的。
- 一个简单std::cout 引出的学习
- 实现简单的 std::cout
- 实现简单的 std::cout
- cout和std::cout的区别
- C++,cout和std::cout的区别
- 语句std::cout<<std::endl的作用
- g++std::cout的使用
- 解开一个困扰自己多时的小问题——从std::cout和endl说起
- 解开一个困扰自己多时的小问题——从std::cout和endl说起
- 解开一个困扰自己多时的小问题——从std::cout和endl说起
- 解开一个困扰自己多时的小问题——从std::cout和endl说起
- 解开一个困扰自己多时的小问题——从std::cout和endl说起
- 解开一个困扰自己多时的小问题——从std::cout和endl说起
- 解开一个困扰自己多时的小问题——从std::cout和endl说起
- 解开一个困扰自己多时的小问题——从std::cout和endl说起
- 解开一个困扰自己多时的小问题——从std::cout和endl说起
- 解开一个困扰自己多时的小问题——从std::cout和endl说起
- 解开一个困扰自己多时的小问题——从std::cout和endl说起
- Vs2005中HttpWorkerRequest的GetPreloadedEntityBody()读不到数据?
- 打开多个Activity,如何返回到第一个Activity? 如 A 打开 B, B 打开 C, C 打开 D, 然后如果从 D 一步返回到 A,并清楚掉 B、C、D呢?
- 三端稳压芯片78xx/79xx的功耗和散热
- Flex:Web报表编辑器——MyReport (可下载使用)
- Excel批量修改超链接
- 一个简单std::cout 引出的学习
- Goodbye to CSS Hack
- vs2005 TreeView控件 根节点点击文字即展开
- 基础学习--表的存储参数(三)
- Ogre 中将Texture转成本地任意格式图片
- native2ascii 的用法
- 让系统 idle 时更省电_采用平台相关 idle 函数以降低平均功耗的一个实践
- MFC中基于对话框程序快捷键的实现
- 增加linux的swap空间