| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 905 人关注过本帖
标题:关于c++标准库
只看楼主 加入收藏
humy
Rank: 2
等 级:论坛游民
帖 子:69
专家分:18
注 册:2012-7-23
结帖率:92.86%
收藏
已结贴  问题点数:20 回复次数:14 
关于c++标准库
1.为什么没有include他就会错,如图
图片附件: 游客没有浏览图片的权限,请 登录注册
如果写#include<string>在前面就不会有错。。。
2  维基百科上说“C标准库
主条目:C标准库
来自C标准库的所有头文件,以另一个名称包含在C++标准中。将原名称移去“.h”并在开头处加上“c”作为新的名称。例如“time.h”改成“ctime”。C++标准库的头文件与C标准库的头文件的   唯一区别是   ,函数位于std::命名空间(虽然很少编译器真正如此)。”
我又看了版主的c++标准库学习笔记“,比如 errno (在 <cerrno> 里)就是一个宏。如果以为它是一个 int,从而使用 std::errno 这样的语句,那么就会出错,而且往往编译器报的错误看上去还非常古怪。另外有一些看上去像函数的宏也常常引发问题,不过这个概率要小一些,因为在 C 的实践中,它们也老出问题,从而累积了不少经验。”      看似   区别不只一个吧?如果只是说区别是函数定义在std里,函数内容差不多,那还多此一举干嘛?
3.“任何以单下划线开始的名字是保留给实现和标准库的。”   中“实现”是什么意思?函数吗?
4.书上说:使用标准库可以大大减少现代c++程序中对指针的需要
为什么?
搜索更多相关主题的帖子: include 编译器 
2012-08-23 11:22
lonmaor
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:郑州
等 级:版主
威 望:75
帖 子:2637
专家分:6423
注 册:2007-11-27
收藏
得分:5 
祝福楼主,你一定学的比我好

从不知道到知道,到知道自己不知道,成长的道路上脚步深深浅浅
2012-08-23 11:31
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:8 
1.为什么没有include他就会错,如图
    名空间也得先定义后使用。
程序代码:
namespace test { int a = 5; }
using namespace test;   // OK

int main()
{
    a = 10;

    return 0;
}
如果把前两行换一下是不行的。标准库头文件里声明过,包完了就可以用。如果你没包,编译器就不认识。

2  维基百科上说“C标准库。。。 唯一区别是   ,函数位于std::命名空间(虽然很少编译器真正如此)。”
。。。看似   区别不只一个吧?如果只是说区别是函数定义在std里,函数内容差不多,那还多此一举干嘛?
    不知道维基上说“很少有编译器真正如此”是什么意思。现代的编译器都很重视名空间的概念。

    那个 errno 的问题,不是 C++ 里特有的,在 C 语言里也规定 errno 也是一个宏。只是一般在 C 语言里,误以为它是一个整数好像不会犯什么太大的错误。比如 errno = 0 或者 int a = errno 这样的语句都没什么问题。
    但在 C++ 里,由于可能会习惯性的在这样的东西前加上 std::。可是这回就行不通了,因为宏不在 std 里。所以我才特别指出了一下而已。
    至于函数式的宏,即使在 C 语言里你以为它是个函数也会错误。比如取它的地址之类的。当然相关的语句在 C++ 里也是不成立的。我当时特意指出的目的是为了提醒那些已经熟悉 C 的人,在学习 C++ 的时候这些地方要特别注意。

3.“任何以单下划线开始的名字是保留给实现和标准库的。”   中“实现”是什么意思?函数吗?
   编译器也是程序,也是人写的。标准库也是要人开发出来才能用的。这些特殊的标识符语法是为了方便开发编译器和开发标准库的人准备的,而且他们只能用这个,不能使用任何不以下划线开头的标识符(你去随便找一个系统自带的头文件看看就知道了)。而一般的程序员不应该用这类标识符(但不是不能用)。你不用这样的标识符,就不用担心你定义的名字和其它东西重名了。

4.书上说:使用标准库可以大大减少现代c++程序中对指针的需要
    很多语言是没有指针这个概念的,实践在告诉我们指针这种类型不是必须的。使用指针才更方便的场合,一般都是在操作底层结构的时候。C++ 试图提供足够的组件,以高效实现底层结构,方便程序员使用。比如 new delete 和 引用 等机制,就可以在一定程序避免使用指针。使用 list 等容器更省去了自己实现基本数据结构的需要。c++ 希望你把精力放在其它东西上面,而这些方面可能并不能发挥指针的长处。


[ 本帖最后由 pangding 于 2012-8-24 01:07 编辑 ]
2012-08-24 01:03
xuexi005
Rank: 2
等 级:论坛游民
帖 子:30
专家分:10
注 册:2012-7-24
收藏
得分:0 
慢慢接触类库,对指针的依赖少一些好,易懂!
2012-08-24 07:35
mfs111116
Rank: 2
来 自:山东烟台
等 级:论坛游民
帖 子:28
专家分:38
注 册:2012-8-22
收藏
得分:0 
命名空间,正在学,书中列举了用命名空间的优点和缺点,大意是规范,避免错误吧……新手,请指教。
2012-08-24 18:01
humy
Rank: 2
等 级:论坛游民
帖 子:69
专家分:18
注 册:2012-7-23
收藏
得分:0 
回复 2楼 lonmaor
?为什么?版主应该很强的。。。
anyway  ,thanks .
2012-08-25 16:54
humy
Rank: 2
等 级:论坛游民
帖 子:69
专家分:18
注 册:2012-7-23
收藏
得分:0 
回复 3楼 pangding
1.是想知道c和c++库的区别去查的,但维基百科的那句话原来也就没看太懂。。。
2“任何以单下划线开始的名字是保留给实现和标准库的。” 这话 版主解释的很清楚但, “实现”是什么意思还没看出来。。。?
谢谢
2012-08-25 17:07
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
“实现”是什么意思还没看出来。。。?
标准库只是一个接口规范,比如它规定了 cout 应该 做什么,但没有规定怎样做。写编译器的人得想办法把标准库要求他们做的事情用代码写出来。这种行为称作实现一个标准库。
另外标准库还会使用一些比如 protect 内部数据。它们是标准库的一部分,但不希望用户可见。这些变量的名字标准库也规定为用下划线开头了。(这种情况在标准里不是很多见)

另一个术语是保留。它的本意是“有个东西挺有用的,我现在还没想好有什么用。但我先占个地留着,你们别使。等我想好了再告诉你们。”的意思。
这个术语并不是 C++ 中的概念。比如 intel cpu 的标识寄存器共有 32 位,但目前就只有 0-21 这 22 位在用(还没用全),22-31 这些位都没有指定意义。intel 手册就指明这些位是保留位,意思是说它们也许将来会用上。任何程序员都不要使用,以免将来你的程序无法正常工作。
所以提到保留,一般就是指,“这些东西另有用处,你们最好不要用”的意思。

因此“任何以单下划线开始的名字是保留给实现和标准库的。”其实就是说,下划线开头的标识符是保给那两种情况用的。如果你不是为这个目的,就不要用。

2012-08-27 00:55
humy
Rank: 2
等 级:论坛游民
帖 子:69
专家分:18
注 册:2012-7-23
收藏
得分:0 
回复 8楼 pangding
恩。。谢谢。。“实现和标准库”在上面的例子我还是只看到了一种。。就是实现标准库。。。标准库规定了接口,写出实际代码就是实现的话,那“标准库”是什么?就是接口?那接口上的只有形参能用到下划线开头的名,那他们在实现代码里也会被用,那这两个不就是一个情况了?。。。。。还有,您解释   实现  说的是“比如”  那就还有其他情况?我看书也看多好多句子有实现这个词,大概意思就是给你一个概念框架,你把内容添上。。那我们自己也有很多这样的工作,那怎么还说我们不能用下划线。。。    总结“实现和标准库”难道就是标准库的实现?
2012-08-27 08:31
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
问题很好,不过思路混乱,主要是概念不清的缘故。

授人以渔,不授人以鱼。
2012-08-27 08:33
快速回复:关于c++标准库
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.024098 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved