首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C++std命名空间

总以为自己懂了,可是仔细想想,多问自己几个问题,发现好像又不是很清楚 命名空间(Namespace)是C++中一种用于解决命名冲突问题的机制,它能够将全局作用域划分为若干个不同的区域,每个区域内可以有相同名称的标识符...在C++中,我们可以使用namespace关键字来定义命名空间 namespace MyNamespace { int x = 5; void printX() { std...::cout << "x = " << x << <em>std</em>::endl; } } 要在代码中使用<em>命名</em><em>空间</em>中的<em>成员</em>,我们可以通过<em>命名</em><em>空间</em>名::<em>成员</em>名的方式进行访问 int main() {...MyNamespace::x = 10; MyNamespace::printX(); return 0; } 可以使用using namespace <em>命名</em><em>空间</em>名;语句引入<em>命名</em><em>空间</em>,以便在当前作用域内直接访问<em>命名</em><em>空间</em>中的<em>成员</em>...可能导致<em>命名</em>冲突,因此应该慎重使用,一般工程项目都是用<em>std</em>::string这样带<em>命名</em><em>空间</em>的来避免名称冲突和提供代码的可读性

13110

C++头文件和std命名空间

C++ 是在C语言的基础上开发的,早期的 C++ 还不完善,不支持命名空间没有自己的编译器,而是将 C++ 代码翻译成C代码,再通过C编译器完成编译。...后来 C++ 引入了命名空间的概念,计划重新编写库,将类、函数、宏等都统一纳入一个命名空间,这个命名空间的名字就是stdstd 是 standard 的缩写,意思是“标准命名空间”。...可以发现,对于不带.h的头文件,所有的符号都位于命名空间 std 中,使用时需要声明命名空间 std;对于带.h的头文件,没有使用任何命名空间,所有符号都位于全局作用域。.../c.biancheng.net\n"); return 0; } 这两种形式在 Microsoft Visual C++ 和 GCC 下都能够编译通过,也就是说,大部分编译器在实现时并没有严格遵循...第 1) 种写法是标准的, 第 2) 种不标准,虽然它们在目前的编译器中都没有错误,但我依然推荐使用第 1) 种写法,因为标准写法会一直被编译器支持,非标准写法可能会在以后的升级版本中不再支持。

27530
您找到你想要的搜索结果了吗?
是的
没有找到

C++】标准流与命名空间简介 ( Visual Studio 2019 中创建 C++ 项目 | iostream 标准流 | std 标准命名空间 | cout 控制台输出 )

一、Visual Studio 2019 中创建 C++ 项目 打开 Visual Studio 2019 , 选择 " 菜单栏 / 文件 / 新建 / 项目 " 选项 , 创建 新项目 ; 选择 Windows...---- 所有的 C++ 程序都要先包含 标准 IO 流的 头文件 , 以及 使用 std 标准命名空间 ; 1、iostream 标准流 使用 #include "iostream" 包含 C++...标准命名空间 , 该 命名空间中 , 定义了很多标准定义 ; // 使用 std 标准命名空间 // 该命名空间中 , 定义了很多标准定义 using namespace std; 上述代码中的 using...namespace std; 使用标准命名空间代码 , 是 预处理指令 , 用于 通知 编译器 在当前源码中使用 std 标准命名空间 ; std 命名空间 是 英文单词 " standard " 缩写..., 该 命名空间 定义了 标准库 的所有元素 , 如 : cout , cin , string 等 ; 如果 不使用 std 标准命名空间 , 使用其中的元素时 , 必须添加 std:: 前缀 ,

23520

C++的奇迹之旅】C++关键字&&命名空间使用的三种方式&&C++输入&输出&&命名空间std的使用惯例

命名空间定义 定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{} 中即为命名空间成员。 1....具体规则如下: 当前命名空间 首先在当前命名空间中查找。 父命名空间 如果当前命名空间没有找到,则查找其直接父命名空间。...嵌套的父命名空间 如果直接父命名空间没有找到,则继续向上查找更高层次的父命名空间。 全局命名空间 如果所有父命名空间没有找到,则最后在全局命名空间中查找。...#include // stdC++标准库的命名空间名,C++将标准库的定义实现都放到这个命名空间中 using namespace std; int main() { cout...因为C++兼容C语言的用法,这些又用得不是很多,我们这里就不展开学习了。后续如果有需要,我 们再学习。 std命名空间的使用惯例 stdC++标准库的命名空间,如何展开std使用更合理呢?

10510

C++】面向对象编程引入 ( 面向过程编程 | 查看 iostream 依赖 | 面向对象编程 )

+ 头文件 #include "iostream" // 使用 std 标准命名空间 // 该命名空间中 , 定义了很多标准定义 using namespace std; int main()...>> 是输入数据到内存中 ; 记住的方法是 : 标准流 cin 和 cout 始终在 左边 , > 是 数据的方向 ; cin 和 cout 都定义在 iostream 中 , 可以在 Visual...半径 , 周长 , 和 面积 ; 最后 , 在 圆 类型中 , 定义两个 成员函数 , 分别根据 半径 求出 周长 和 面积 ; 代码示例 : // 包含 C++ 头文件 #include "iostream..." // 使用 std 标准命名空间 // 该命名空间中 , 定义了很多标准定义 using namespace std; class Circle { public: double r; //...在上述代码中 , 定义了 Circle 类 , class Circle { ... } 此时 Circle 是一个数据类型 , 编译器并没有为其分配内存 ; 定义 Circle 对象 c 时 , 才为该

29020

C++C++ 引用详解 ⑧ ( 普通引用与常量引用 | 常量引用概念与语法 )

+ 头文件 #include "iostream" // 使用 std 标准命名空间 // 该命名空间中 , 定义了很多标准定义 using namespace std; // 导入 C 头文件...= %d\n", b); // 控制台暂停 , 按任意键继续向后执行 system("pause"); return 0; } 执行结果 : b = 10 b = 20 Press any...; 使用 " 常量引用 " 可以将一个变量的值传递给一个函数的 常量引用形参 , 可以保证该变量值不会在函数内部被修改 ; " 常量引用 " 常用于如下场景 : 作为函数形参 作为函数返回值 定义对象成员...常量引用 b 可以获取 变量 a 的值 , 但是无法修改 变量 a 的值 ; 如果强行通过 常量引用 b 修改 变量 a 的值 , 则会报错 : error C3892: “b”: 不能给常量赋值 错误代码示例...: // 包含 C++ 头文件 #include "iostream" // 使用 std 标准命名空间 // 该命名空间中 , 定义了很多标准定义 using namespace std; /

20310

C++C++ 引用详解 ⑩ ( 常量引用案例 )

已启动生成… 1>------ 已启动生成: 项目: HelloWorld, 配置: Debug Win32 ------ 1>hello_world.cpp 1>D:\002_Project\006_Visual_Studio...使用 std 标准命名空间 // 该命名空间中 , 定义了很多标准定义 using namespace std; // 导入 C 头文件 #include // 常量引用作为函数参数...fun(a); // 控制台暂停 , 按任意键继续向后执行 system("pause"); return 0; } 执行结果 : fun 函数接收到参数 num = 10 Press any...//student.age = 0; } 正确代码示例 : // 包含 C++ 头文件 #include "iostream" // 使用 std 标准命名空间 // 该命名空间中 , 定义了很多标准定义...); // 控制台暂停 , 按任意键继续向后执行 system("pause"); return 0; } 执行结果 : fun 函数接收到参数 student = 18 Press any

18330

C++】类的封装 ③ ( 访问控制权限 )

一、类的封装 : 访问控制权限 1、访问控制权限 在 C++ 语言中 , 类的成员 的 " 访问控制权限 " 是通过 " 访问修饰符 " 指定的 ; 类的 成员属性 和 成员方法 都可以 设置 访问控制权限..., 都可以被 访问修饰符 所修饰 ; C++ 语言 提供了 3 种 访问修饰符 : public : 修饰的 成员变量 和 成员函数 , 是 公开的 , 可以在任何地方访问 , 在 类的内部 和 类的外部...int privateVar; // 私有成员变量 }; 3、默认访问控制权限 如果变量没有指定 访问修饰符 , 那么 默认的访问控制权限 是 私有的 , 默认被 private 修饰 ;...; 二、代码示例 - 访问控制权限 ---- 1、错误代码示例 - 类的 访问控制权限 错误代码示例 : // 包含 C++ 头文件 #include "iostream" // 使用 std 标准命名空间...// 该命名空间中 , 定义了很多标准定义 using namespace std; // 定义类 : 通过 访问修饰符 测试 类的 访问控制权限 class MyClass { int defaultVar

12720

Visual C++ 中的重大更改

因此,宏之前没有任何干预空格的字符串文本被视为用户定义的文本,这可能会产生错误或意外结果。...在 Visual Studio 2015 中的 Visual C++ 中,编译器将此视为用户定义的文字,但由于没有定义匹配的用户定义的 _x 文本,它将报告错误。           ...以下代码在 Visual Studio 2013 中的 Visual C++中成功编译,但在 Visual Studio 2015 中的 Visual C++ 中产生错误。           ...请考虑以下代码,其中联合 U 包含一个匿名结构,此匿名结构包含的成员是一个具有析构函数的命名结构 S。           ...std::allocator::deallocate 在 Visual C++ 2013 和早期版本中,std::allocator::deallocate(p, n) 忽略了传入用于 n 的参数。

5.1K10

Visual C++ 中的重大更改

因此,宏之前没有任何干预空格的字符串文本被视为用户定义的文本,这可能会产生错误或意外结果。...在 Visual Studio 2015 中的 Visual C++ 中,编译器将此视为用户定义的文字,但由于没有定义匹配的用户定义的 _x 文本,它将报告错误。           ...以下代码在 Visual Studio 2013 中的 Visual C++中成功编译,但在 Visual Studio 2015 中的 Visual C++ 中产生错误。           ...请考虑以下代码,其中联合 U 包含一个匿名结构,此匿名结构包含的成员是一个具有析构函数的命名结构 S。           ...std::allocator::deallocate 在 Visual C++ 2013 和早期版本中,std::allocator::deallocate(p, n) 忽略了传入用于 n 的参数。

4.7K00

C++C++ 语言对 C 语言的加强 ① ( 实用性增强 - 变量任意位置定义 | register 关键字增强 - 自动进行寄存器优化 )

之间定义变量 ; 在 C99 标准引入了 局部变量 可以在任何位置声明的语法 ; 老版本的 C 语言编译器 ( 还未兼容 C99 标准 ) 会报错 , 如果使用 2000 年左右的 Microsoft Visual...C++ 开发环境 , 就会报语法错误 ; 为了更好的兼容性 , 一般情况下都要将 C 语言的 变量 定义在 函数开始位置 ; C++ 语言定义变量位置 : C++ 语言 在 C 语言 的基础上 , 增强了..." 实用性 " , 变量可以在 使用时 再定义 , 不需要在 函数 开始位置定义 ; 代码示例 : // 包含 C++ 头文件 #include "iostream" // 使用 std 标准命名空间...// 该命名空间中 , 定义了很多标准定义 using namespace std; int main() { // 作用域开始位置定义变量 int a = 10; // 打印变量值 cout...: // 包含 C++ 头文件 #include "iostream" // 使用 std 标准命名空间 // 该命名空间中 , 定义了很多标准定义 using namespace std;

13320

gtest和gmock的关系_gtest教程

一、基本用法 gtest当前的版本是1.5.0,如果使用Visual C++编译,要求编译器版本不低于7.1(Visual C++ 2003)。...如下图所示,它的msvc文件夹包含Visual C++工程和项目文件,samples文件夹包含10个使用范例。 一般情况下,我们的单元测试代码只需要包含头文件gtest.h。...gtest中常用的所有结构体、类、函数、常量等,都通过命名空间testing访问,不过gtest已经把最简单常用的单元测试功能包装成了一些带参数宏,因此在简单的测试中常常可以忽略命名空间的存在。...throw } // no throw 如果把上图中Visual C++的编译选项/EHsc换成/EHa, try … catch...熟悉C++的读者应该知道,模板函数在进行类型推断(deduction)时匹配相当严格,不像普通函数那样允许类型提升(promotion)。如果上面省略 u后缀,就会造成编译错误

1.7K20

C++命名空间 namespace 与 标准流 iostream ( 命名空间概念简介 | 命名空间定义 | 命名空间使用 | iostream 中的命名空间分析 )

都会报 " 未定义标识符 " 错误 ; 如果想要在 不声明 命名空间 的情况下 , 使用 标准流 中的标识符 , 就需要使用 std::cout std::endl std::cin 否则 无法访问...这些 标识符; 代码如下 : 在下面的代码中 , 没有声明全局命名空间 std , 要使用 iostream 中的标识符 , 必须加上 std:: 前缀 ; // 包含 C++ 头文件 #include...MyNamespace; 注意 : 使用 命名空间 需要在 定义命名空间之后 , 否则会报错 ; 3、使用默认的命名空间 当前的 全局命名空间 就是 默认的 命名空间 , 如果你 没有命名空间 中定义...四、标准流 iostream ---- 标准流 iostream 的内容 , 都定义在 std 命名空间中 ; C++ 语言为了与 C 语言 在 头文件上 进行区分 C++ 语言的头文件没有 .h 后缀...下面两行代码 在一起使用 , 使用 C++ 的 iostream 标准流时 , 需要使用 #include "iostream" 代码先导入该标准库 ; 由于 iostream 头文件中没有定义 全局命名空间

28630

C++最佳实践 | 2. 代码风格

永远不要在头文件中使用using namespace 这会导致正在using的命名空间被强行拉入到包含头文件的所有文件的命名空间中,从而造成命名空间污染,并可能在导致名称冲突。...忘记初始化成员会导致未定义行为错误,而这些错误通常很难发现。 如果成员变量在初始化后不会更改,则将其标记为const。...总是使用命名空间 几乎没有理由需要全局命名空间中声明标识符。相反,函数和类应该存在于适当命名命名空间中,或者存在于命名空间里的类中。...放在全局命名空间中的标识符有可能与来自其他库(主要是没有命名空间的C库)的标识符发生冲突。...具体来说,Visual Studio只自动识别.cpp和.cxx为C++文件,而Vim不一定会把.cc识别为C++文件。

1.1K10

C++】函数重载 ① ( 函数重载概念 | 函数重载判断标准 - 参数个数 类型 顺序 | 返回值不是函数重载判定标准 )

判定标准 : 只有 函数参数 的 个数 / 类型 / 顺序 的不同 是 " 函数重载 " 的判断标准 , 函数 的 返回值 不是 " 函数重载 " 的 判断标准 ; 一、函数重载 1、函数重载概念 C+...实参 1.5f , 参数类型是 1 个 float 类型 , 调用的是 第 3 个重载函数 ; fun(1.5f); // 调用第三个 fun 函数 代码示例 : // 包含 C+...+ 头文件 #include "iostream" // 使用 std 标准命名空间 // 该命名空间中 , 定义了很多标准定义 using namespace std; // 函数重载示例...控制台暂停 , 按任意键继续向后执行 system("pause"); return 0; } 执行结果 : 打印整数: 4 打印两个整数: 2 和 3 打印浮点数: 1.5 Press any...Studio 2019 , 代码写完就会报错 ; 错误代码示例 : // 包含 C++ 头文件 #include "iostream" // 使用 std 标准命名空间 // 该命名空间中 ,

22220

REDHAWK——组件结构

①、C++C++ 中,生成的枚举常量是嵌套命名空间中的静态变量,位于顶级命名空间下 enums: enums::simple::LABEL enums::structprop::field::LABEL...+ 中,生成的枚举常量是嵌套命名空间中的静态变量,位于顶级命名空间下 enums: enums.simple.LABEL enums.structprop.field.LABEL enums.structseq_struct.field.LABEL...例如,如果结构体属性 foo 有一个简单成员 bar,则该成员的名称为 bar,ID 为 foo::bar。这种命名约定也适用于结构体序列属性。...如果错误的类型被打包进 CORBA::Any,属性配置将失败。例如,如果一个属性被定义为 long 类型,而打包进值元素的值是 short 类型,那么操作将失败。...这两种方法都要求开发人员从 CORBA Any 对象中解组数据。对于 C++,结构化数据类型需要重载运算符>>=。 getData - (轮询)从事件频道抓取一条消息。如果没有可用消息,则返回 -1。

9610

C++打怪升级(一)- 命名空间、缺省形参、重载

; std::cout << N1::N2::Add << std::endl; return 0; } 同一工程中同名的命名空间可以同时存在 在编译后同名命名空间成员将会合并到一个命名空间里...在介绍之前先来了解一下C++官方库定义的命名空间std std - C++标准库的命名空间C++中的头文件定义的所有内容成员(定义与实现)都处在一个命名空间(作用)域std中,用以与用户使用的成员相隔离...本质是该成员的作用域发生了变化:从命名空间域改变为了引入处的作用域。 优点是使用命名空间成员方便了 缺点是引入处作用域如果有与引入成员相同的标识符会引发程序出编译错误。...<< std::endl; return 0; } 使用关键字using namespace将命名空间名称(所有成员)引入 又称为命名空间的全部展开 可以直接使用命名空间内所有的成员了 所有成员的作用域发生了变化...命名空间往往有很多成员,我们可能也不知道哪些成员命名空间定义了,哪些又没有定义,这种情况极易与我们自己程序的标识符(变量、函数、类)等发生名字冲突,C语言面临的问题又显现了出来。

78720

C++】函数重载 ② ( 重载函数调用分析 | 函数重载特点 | 函数重载与默认参数 )

, 都 匹配失败 , 或者 找出了多个 匹配函数 , 编译都宣告失败 ; 2、函数重载特点 函数重载特点 : 相互独立 : 重载函数 本质上 是 不同的函数 , 重载函数 之间 都是相互独立的 , 没有任何联系...+ 头文件 #include "iostream" // 使用 std 标准命名空间 // 该命名空间中 , 定义了很多标准定义 using namespace std; // 函数重载 + 默认参数...+ 头文件 #include "iostream" // 使用 std 标准命名空间 // 该命名空间中 , 定义了很多标准定义 using namespace std; // 函数重载 + 默认参数...2, 3); // 控制台暂停 , 按任意键继续向后执行 system("pause"); return 0; } 执行结果 : i = 1 , j = 2 , k = 3 Press any...+ 头文件 #include "iostream" // 使用 std 标准命名空间 // 该命名空间中 , 定义了很多标准定义 using namespace std; // 函数重载 + 默认参数

20920

C++】const 关键字 与 #define 宏定义 对比 ( 相同点 - 都可定义常量和优化性能 | 不同点 - const 常量进行作用域检查和类型检查 )

+ 语言 中都会在编译时报错 ; 在 C/C++ 编译环境中会报错 ; 在编译 Linux 内核时 , 如果出现这种情况 , 编译会通过 , Linux 内核支持数组大小是变量的情况 ; 错误代码示例...: // 包含 C++ 头文件 #include "iostream" // 使用 std 标准命名空间 // 该命名空间中 , 定义了很多标准定义 using namespace std; //...+ 头文件 #include "iostream" // 使用 std 标准命名空间 // 该命名空间中 , 定义了很多标准定义 using namespace std; // 导入 C 头文件...+ 头文件 #include "iostream" // 使用 std 标准命名空间 // 该命名空间中 , 定义了很多标准定义 using namespace std; // 导入 C 头文件...+ 头文件 #include "iostream" // 使用 std 标准命名空间 // 该命名空间中 , 定义了很多标准定义 using namespace std; // 导入 C 头文件

22940
领券