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 编辑 ]