为什么这里需要“使用命名空间std”?

问题描述 投票:0回答:1

我目前使用三个文件:main.cpp、functions.cpp、functions.h。

functions.h 文件如下所示:

#ifndef FUNCIONES_H
#define FUNCIONES_H

#include <vector>
#include <string>
#include <iostream>

// 1)
void selection_sort(vector<int> & v);
void insertion_sort(vector<int> & v);


#endif

请注意,代码中没有这样的行:

using namespace std
,因为我想手动使用它,例如,
std::cout
。但函数声明中出现错误。这是错误消息:

incomplete type "void" is not allowedC/C++(70)
,

identifier "vector" is undefinedC/C++(20)
,

type name is not allowedC/C++(254)
,以及

identifier "v" is undefinedC/C++(20)
.

这对我来说似乎很奇怪,因为我已经包含了向量库,但由于我没有使用 std 库,因此该文件似乎不知道向量是什么......

我可以只输入

using namespace std
并解决这个问题,但我想知道为什么它不能像这样工作。

c++ std
1个回答
0
投票

cout
vector
都是标准库中的实体。所有这些实体都位于
std
命名空间中,使用时需要相应的前缀。唯一的例外是标准库中的预处理宏,它们本质上不受命名空间约束。

相比之下,

int
是核心语言关键字,而不是标准库的一部分。

标准库中的一些实体也可以在全局命名空间范围中声明,因此不需要

std::
前缀。例如,如果您尝试编写
printf
而不是
std::printf
,这很可能会起作用,但由于历史原因,全局命名空间范围中的声明仅存在于从 C 派生的实体,并且仅在包含时才保证被声明相应的 C 样式标头(例如
<stdio.h>
)。另一方面,这些头文件形式并不能保证
std
中的声明可用,因此我建议忽略它们的存在,除非您需要 C 兼容性。

© www.soinside.com 2019 - 2024. All rights reserved.