&引用;内置的;C+中的函数+; 我是C++初学者,所以如果答案显而易见,那就是我要找的。我在读第二个回答时感到困惑 #include <algorithm> #include <cassert> int main() { using std::swap; int a(3), b(5); swap(a, b); assert(a == 5 && b == 3); } #包括 #包括 int main() { 使用std::swap; INTA(3)、b(5); 掉期(a、b); 断言(a==5&&b==3); }

&引用;内置的;C+中的函数+; 我是C++初学者,所以如果答案显而易见,那就是我要找的。我在读第二个回答时感到困惑 #include <algorithm> #include <cassert> int main() { using std::swap; int a(3), b(5); swap(a, b); assert(a == 5 && b == 3); } #包括 #包括 int main() { 使用std::swap; INTA(3)、b(5); 掉期(a、b); 断言(a==5&&b==3); },c++,function,built-in,C++,Function,Built In,我不明白的是“这只是一个定义的函数。我的意思是,为什么它不是直接内置的”,但是没有必要包含一个新的库,所以它不是内置的吗?std库是否自动导入(如果是,为什么名称空间不自动设置为std)?在代码中,您有以下行: using std::swap; 因此对swap的调用不需要std::。对于assert,它被定义为宏,因此也不需要std::。如果你不使用使用< /C> >,那么除了宏之外,你就必须使用 STD::/Cuff>来引用标准C++库提供的函数和对象。 标准C++库通常在编译程序创建可执行

我不明白的是“这只是一个定义的函数。我的意思是,为什么它不是直接内置的”,但是没有必要包含一个新的库,所以它不是内置的吗?std库是否自动导入(如果是,为什么名称空间不自动设置为std)?

在代码中,您有以下行:

using std::swap;
因此对
swap
的调用不需要
std::
。对于
assert
,它被定义为宏,因此也不需要
std::
。如果你不使用<代码>使用< /C> >,那么除了宏之外,你就必须使用<代码> STD::/Cuff>来引用标准C++库提供的函数和对象。 <>标准C++库通常在编译程序创建可执行文件时链接到程序中。从这个角度来看,你可能会认为它是“内置的”。然而,术语“内置”通常意味着编译器将单词
swap
视为关键字,这里的情况并非如此
swap
是在
算法
头文件中定义的模板函数,
assert
是在
cassert
中定义的宏

名称空间是一种方便的方式,可以方便地按名称对软件的各个部分进行分区。因此,如果您想定义自己的
swap
函数,可以将其放入自己的命名空间中

namespace mine {
    template <typename T> void swap (T &a, T &b) { /*...*/ }
}
名称空间挖掘{
模板无效交换(T&a,T&b){/*…*/}
}
而且它不会与标准冲突,也不会与定义了swap而没有名称空间的库冲突

namespace mine {
    template <typename T> void swap (T &a, T &b) { /*...*/ }
}

“这只是一个已定义的函数。我的意思是,为什么它不是直接内置的”但不需要导入新库,所以它不是内置的吗?std库是否自动导入(如果是,为什么名称空间不自动设置为std)

嗯,通过
定义函数
它意味着,函数很可能已经预先编写好,并且在库中定义,它不是直接内置的,可能是因为它是这样设计的;语言中只包含核心要素,其他所有内容都在库中,因此程序员可以导入他们想要的内容

通过内置,它通常是一个关键字,如
for
while

不,std不会自动导入,因为它的设计目的是让程序员可以选择他们想要的名称空间,如自定义名称空间或std。自动导入std不好的一个例子是:

假设您自动定义了std,那么您希望使用名称空间foo执行
,如果foo也有函数
cout
,你会遇到一个大问题,比如说你想这样做

// code above
cout << "Hello, World" << endl;
// code below
//上面的代码
库特
这只是一个已定义的函数。我的意思是,为什么它不是直接内置的“但是没有必要包括一个新的库,所以它不是内置的吗?”

< C++ >库是C++的一部分,但它不是核心语言的一部分。C++是一种巨大的、巨大的语言,使编译器知道语言的每一个角落都会使编译器变得庞大而缓慢地加载。通过
#包括
头文件来扩展功能的能力。指定它们需要什么

为什么名称空间不能自动设置为std


这将基本上把各种非常常见的单词变成关键字。你不应该使用的单词列表(关键字,C中的全局函数,POSIX或Microsoft保留的单词,…)将C++标准库放入命名空间STD是一个特性。把所有这些名字放到全局命名空间中会是一个巨大的错误。

“STD库是否自动导入?”“您认为
#包括哪些内容。您有一行
代码使用std::swap
,因此您不再需要在swap上使用
std::
。它是一个库函数,不是核心语言的一部分。它位于标准库的一个标题中。并且名称空间不会自动设置,以便您可以控制代码中各种名称空间的范围。