买正品去哪个网站最好,东莞网络优化哪家公司好,交互网站建设,设备管理系统下载一、历史 C是在C上继承拓展的#xff01;
java是一家公司#xff08;甲骨文#xff09;借鉴C生成的#xff01;
C#是微软借鉴java生成的#xff01;
二、命名空间 当我们定义一个名叫rand的变量#xff0c;但是由于stdlib头文件里面有个函数跟rand重名#xff01;因此…一、历史 C是在C上继承拓展的
java是一家公司甲骨文借鉴C生成的
C#是微软借鉴java生成的
二、命名空间 当我们定义一个名叫rand的变量但是由于stdlib头文件里面有个函数跟rand重名因此会发生命名冲突
因此为了解决该问题C引入了命名空间的定义
同一个域里面不可以定义同一个变量
不同的域里面可以定义同一个变量局部变量访问优先
常见的域有类域、命名空间域、局部域、全局域
#includestdio.h
#includestdlib.hint a 0;
int main()
{int a 1;printf(%d\n, a);printf(%d\n, ::a);return 0;
}
对于上面这段代码 打印的第一个a为局部变量第二个::a为全局变量。
::被称为域作用限定域
::的左边为空白空格无影响表示的就是在全局域访问
#includestdio.h
#includestdlib.h
#includeiostreamint a 0;
namespace bit
{int a 1;
}
int main()
{// int a 2;printf(%d\n, a); // 打印结果为0//printf(%d\n, ::a);return 0;
}默认的访问顺序为 局部域-全局域
如果不指定不会访问命名空间域默认不会的
#includestdio.h
#includestdlib.h
#includeiostream//int a 0;
namespace bit
{int a 1;
}
int main()
{// int a 2;printf(%d\n, a);//printf(%d\n, ::a);return 0;
}代码会直接报错
有两种方法来访问命名空间域
展开了命名空间域指定访问的的命名空间域
1、展开命名空间域
namespace bit
{int a 1;
}
// 展开命名空间
using namespace bit;此时相当于将命令空间中的a暴漏在全局域中
#includestdio.h
#includestdlib.h
#includeiostreamint a 0;
namespace bit
{int a 1;
}
// 展开命名空间
using namespace bit;int main()
{printf(%d\n, a);return 0;
}
此时会报错a变量不明确因为两个变量都位于全局域当中
2、指定命名空间
#includestdio.h
#includestdlib.h
#includeiostreamint a 0;
namespace bit
{int a 1;
}
// 展开命名空间
using namespace bit;int main()
{int a 2;printf(%d\n, a);printf(%d\n, ::a);printf(%d\n, bit::a);return 0;
}通过作用域限定符指定命名空间从而访问bit命令空间里面的变量
展开指的是编译时是否会去命名空间中搜索
最好不要轻易将命名空间暴漏给全局域
3、命名空间的定义 正常的命名空间定义 定义命名空间需要使用到namespace关键字后面跟命名空间的名字然后接一对{}即可{} 中即为命名空间的成员。 命名空间中可以定义变量/函数/类型 namespace bit
{// 命名空间中可以定义变量/函数/类型int rand 10;int Add(int left, int right){return left right;}struct Node{struct Node* next;int val;};
} 命令空间可以嵌套 namespace N1
{int a 0;int b;int Add(int left, int right){return left right;}namespace N2{int a 2;int d;int Sub(int left, int right){return left - right;}}
} 此时N1和N2的a为两个不同的变量 int main()
{printf(%d\n,N1::a); // 访问N1中的aprintf(%d\n,N1::N2::a); // 访问N2中的aprintf(%d\n,N1::Add(1,2));return 0;
} 同一个工程中允许存在多个相同名称的命名空间,编译器最后会合成同一个命名空间中。 例如有一个quequ.h的头文件定义了如下 namespace cc
{int x 0;
} 有一个stack.h的头文件定义了如下 namespace cc
{int y 0;
} 此时如果有一个test.c的文件 #includestack.h
#includequeue.hint main()
{printf(%d\n,cc::x);printf(%d\n,cc::y);return 0;
} 可以访问x和y合并到了一个命名空间 如何解决同一个命名空间定义变量名相同的变量 使用命名空间的嵌套 std标准库 std也被称作C标准库包括STL库和C库 在C编程中using namespace std; 是一条指令用于告诉编译器在当前作用域中使用标准命名空间std。标准命名空间包含了C标准库中的所有函数、对象和类型例如cout、cin、vector、string等。
详细解释
命名空间namespace
命名空间是C中的一种机制用于防止命名冲突。标准库中所有的名称都被定义在命名空间std中。例如标准输出流对象cout的完整名称是std::cout。
using namespace std;的作用
当你使用using namespace std;时你告诉编译器在当前作用域中默认使用std命名空间中的所有名称。这意味着你可以直接使用cout、cin等而不需要每次都写std::cout、std::cin。 #include iostreamusing namespace std;int main() {cout Hello, World! endl;return 0;}
在这个例子中由于使用了using namespace std;我们可以直接使用cout和endl而不需要写成std::cout和std::endl。
注意事项
命名冲突
使用using namespace std;可能会导致命名冲突。如果你的代码中包含了与标准库中名称相同的变量或函数名可能会引发冲突。例如 #include iostreamusing namespace std;void sort() {// 自己定义的sort函数}int main() {sort(); // 这是调用自己的sort函数还是标准库的sort函数return 0;}
在这种情况下编译器可能会产生混淆不知道你是要调用标准库中的sort函数还是你自己定义的sort函数。
推荐做法 为了避免命名冲突许多开发者更倾向于在需要使用标准库名称时显式地使用std::前缀特别是在大型项目或库开发中。 #include iostreamint main() {std::cout Hello, World! std::endl;return 0;}
这样可以清楚地知道每个名称的来源减少命名冲突的风险。
总之using namespace std; 是一个方便的工具可以简化代码的书写但在使用时需要小心特别是在大型项目中以避免潜在的命名冲突。
iostream 是 C 的一个头文件用于包含输入输出流库。这个库提供了处理输入和输出的功能例如使用 std::cout 输出到控制台或使用 std::cin 从控制台读取输入。
总结来说
#includeiostream 用于引入输入输出功能。using namespace std; 使得可以直接使用 std 命名空间中的标识符简化代码书写。
将命名空间中某个成员引入
using N::b;
int main()
{printf(%d\n, N::a);printf(%d\n, b);return 0;
}
可以避免将整个命名空间展开造成容易出错
总结命令空间是为了解决C语言的缺陷即命名冲突
三、C输入输出
std是C标准库的命名空间名C将标准库的定义实现都放到这个命名空间中 是流插入运算符是流提取运算符 cout hello world; 相当于把hello world流入到显示器当中cout和cin是全局的流对象endl是特殊的C符号表示换行输出他们都包含在包含 iostream 头文件中。 cout hello world\nendl; 使用C输入输出更方便不需要像printf/scanf输入输出时那样需要手动控制格式。 C的输入输出可以自动识别变量类型。 C控制输出精度和宽度比较复杂且不容易记住建议使用C语言的输出形式控制精度 printf的输出比C的cout输出快 缓冲机制 printf 使用的是C标准库的 stdio.h其输出是基于缓冲区的。默认情况下标准输出是行缓冲的这意味着输出会在遇到换行符时刷新。cout 使用的是C标准库的 iostream其输出也是基于缓冲区的但它还涉及到对象和流操作这可能会增加一些开销。此外cout 默认是同步与C的标准输出流printf这也会影响性能。 同步机制 C的 iostream 库默认与C标准库的 stdio 同步以确保混合使用 printf 和 cout 时的输出顺序正确。这种同步机制会带来额外的性能开销。你可以通过调用 std::ios::sync_with_stdio(false); 来禁用这种同步从而提高 cout 的性能 #include iostreamusing namespace std;int main() {ios::sync_with_stdio(false); // 禁用与stdio的同步cout Hello, World! endl;return 0;} 格式化和类型安全 printf 是一个基于格式字符串的函数它直接操作C风格的字符串效率较高但缺乏类型安全和灵活性。cout 是类型安全的它使用运算符重载来处理不同类型的数据这虽然带来了更高的灵活性和安全性但也增加了运行时的开销。 模板和流操作 cout 使用了模板和流操作这些都是C语言特有的高级特性虽然提供了更强大的功能和更好的类型安全性但也会引入额外的开销。 文章转载自: http://www.morning.kyctc.cn.gov.cn.kyctc.cn http://www.morning.nhlyl.cn.gov.cn.nhlyl.cn http://www.morning.hhpkb.cn.gov.cn.hhpkb.cn http://www.morning.psgbk.cn.gov.cn.psgbk.cn http://www.morning.pngph.cn.gov.cn.pngph.cn http://www.morning.fbmrz.cn.gov.cn.fbmrz.cn http://www.morning.qhmql.cn.gov.cn.qhmql.cn http://www.morning.yfrbn.cn.gov.cn.yfrbn.cn http://www.morning.rmfw.cn.gov.cn.rmfw.cn http://www.morning.bklhx.cn.gov.cn.bklhx.cn http://www.morning.mwpcp.cn.gov.cn.mwpcp.cn http://www.morning.dpsgq.cn.gov.cn.dpsgq.cn http://www.morning.iknty.cn.gov.cn.iknty.cn http://www.morning.xfxqj.cn.gov.cn.xfxqj.cn http://www.morning.ymdhq.cn.gov.cn.ymdhq.cn http://www.morning.zlces.com.gov.cn.zlces.com http://www.morning.dpqwq.cn.gov.cn.dpqwq.cn http://www.morning.nkjkh.cn.gov.cn.nkjkh.cn http://www.morning.nxzsd.cn.gov.cn.nxzsd.cn http://www.morning.lmtbl.cn.gov.cn.lmtbl.cn http://www.morning.jyzqn.cn.gov.cn.jyzqn.cn http://www.morning.xwzsq.cn.gov.cn.xwzsq.cn http://www.morning.glxmf.cn.gov.cn.glxmf.cn http://www.morning.xpqdf.cn.gov.cn.xpqdf.cn http://www.morning.ksgjn.cn.gov.cn.ksgjn.cn http://www.morning.nmngg.cn.gov.cn.nmngg.cn http://www.morning.hpspr.com.gov.cn.hpspr.com http://www.morning.lkfhk.cn.gov.cn.lkfhk.cn http://www.morning.mrfnj.cn.gov.cn.mrfnj.cn http://www.morning.roymf.cn.gov.cn.roymf.cn http://www.morning.mqmmc.cn.gov.cn.mqmmc.cn http://www.morning.swkzr.cn.gov.cn.swkzr.cn http://www.morning.cpktd.cn.gov.cn.cpktd.cn http://www.morning.jjzbx.cn.gov.cn.jjzbx.cn http://www.morning.txhls.cn.gov.cn.txhls.cn http://www.morning.cnbdn.cn.gov.cn.cnbdn.cn http://www.morning.bpmnz.cn.gov.cn.bpmnz.cn http://www.morning.mxhys.cn.gov.cn.mxhys.cn http://www.morning.rxgnn.cn.gov.cn.rxgnn.cn http://www.morning.nkllb.cn.gov.cn.nkllb.cn http://www.morning.hcszr.cn.gov.cn.hcszr.cn http://www.morning.bhdtx.cn.gov.cn.bhdtx.cn http://www.morning.xfhms.cn.gov.cn.xfhms.cn http://www.morning.pxspq.cn.gov.cn.pxspq.cn http://www.morning.nrfrd.cn.gov.cn.nrfrd.cn http://www.morning.blxlf.cn.gov.cn.blxlf.cn http://www.morning.krdxz.cn.gov.cn.krdxz.cn http://www.morning.dighk.com.gov.cn.dighk.com http://www.morning.jwrcz.cn.gov.cn.jwrcz.cn http://www.morning.xmhpq.cn.gov.cn.xmhpq.cn http://www.morning.yrjkp.cn.gov.cn.yrjkp.cn http://www.morning.lqffg.cn.gov.cn.lqffg.cn http://www.morning.ywpwq.cn.gov.cn.ywpwq.cn http://www.morning.tpnch.cn.gov.cn.tpnch.cn http://www.morning.pzwfw.cn.gov.cn.pzwfw.cn http://www.morning.qhrsy.cn.gov.cn.qhrsy.cn http://www.morning.rjnx.cn.gov.cn.rjnx.cn http://www.morning.pmlgr.cn.gov.cn.pmlgr.cn http://www.morning.mnygn.cn.gov.cn.mnygn.cn http://www.morning.clpkp.cn.gov.cn.clpkp.cn http://www.morning.rgkd.cn.gov.cn.rgkd.cn http://www.morning.rdpps.cn.gov.cn.rdpps.cn http://www.morning.tdnbw.cn.gov.cn.tdnbw.cn http://www.morning.dmzqd.cn.gov.cn.dmzqd.cn http://www.morning.tlpgp.cn.gov.cn.tlpgp.cn http://www.morning.rqjl.cn.gov.cn.rqjl.cn http://www.morning.gnwpg.cn.gov.cn.gnwpg.cn http://www.morning.lrybz.cn.gov.cn.lrybz.cn http://www.morning.lkfhk.cn.gov.cn.lkfhk.cn http://www.morning.fplqh.cn.gov.cn.fplqh.cn http://www.morning.qichetc.com.gov.cn.qichetc.com http://www.morning.bpmdn.cn.gov.cn.bpmdn.cn http://www.morning.yfffg.cn.gov.cn.yfffg.cn http://www.morning.lftpl.cn.gov.cn.lftpl.cn http://www.morning.c7630.cn.gov.cn.c7630.cn http://www.morning.shsh1688.com.gov.cn.shsh1688.com http://www.morning.dwkfx.cn.gov.cn.dwkfx.cn http://www.morning.ndfwh.cn.gov.cn.ndfwh.cn http://www.morning.rrwft.cn.gov.cn.rrwft.cn http://www.morning.xzgbj.cn.gov.cn.xzgbj.cn