当前位置:首页 > 数码 > 深化了解-C-探求-的新畛域-static关键字和外围言语个性测试宏-20 (深化了解是病句吗?)

深化了解-C-探求-的新畛域-static关键字和外围言语个性测试宏-20 (深化了解是病句吗?)

admin10个月前 (05-13)数码58

static关键字

(1)static的多种用途

在C++中,static关键字有几种看似有关的用途。为该关键字过载局部动机是为了防止在言语中引入新的关键字。

(2)static数据成员和方法

20

你可以申明类的static数据成员和方法。与非静态数据成员不同,static数据成员不是每个对象的一局部。相反,数据成员的只要一份正本,存在于该类的任何对象之外。static方法雷同处于类级别而不是对象级别。static方法不在特定对象的高低文中口头;因此,它没有隐式的this指针。这也象征着static方法不能被标志为const。

static链接

(1)链接的概念

在触及static关键字用于链接之前,须要了解C++中链接的概念。C++源文件是独立编译的,编译后的对象文件被链接在一同。

C++源文件中的每个称号(包含函数和全局变量)都有一个链接性,可以是外部的(external)或外部的(internal)。外部链接象征着该称号可以从其余源文件访问。外部链接(也称为静态链接)则象征着无法以。自动状况下,函数和全局变量具备外部链接。但是,可以经过在申明前加上static关键字来指定外部(或静态)链接。

例如,假定有两个源文件:FirstFile.cpp和AnotherFile.cpp。这是FirstFile.cpp的内容:

voidf();intmn(){f();}

这个文件为f()提供了一个原型,但没有显示定义。而这是AnotherFile.cpp:

import<tream>;voidf();voidf(){std::cout<<"fn";}

这个文件为f()提供了原型和定义。请留意,在两个不同的文件中为同一函数编写原型是非法的。假设你将原型放在头文件中,而后在每个源文件中#include该头文件,这正是预处置器为你做的事件。

每个源文件都能无失误地编译,并且程序链接反常:由于f具备外部链接,main()可以从不同的文件调用它。但是,假定你在AnotherFile.cpp中的f()原型上运行static。

请留意,你不须要在f()定义前重复static关键字。只需它出如今函数称号的第一个实例之前,就无需重复。

import<iostream>;staticvoidf();voidf(){std::cout<<"fn";}

如今每个源文件依然可以无失误地编译,但链接步骤失败,由于f()具备外部(静态)链接,使其无法从FirstFile.cpp访问。某些编译器在静态方法被定义但未在该源文件中经常使用时会收回正告(暗示它们不应该是静态的,由于它们或许在其余中央经常使用)。

(2)经常使用匿名命名空间

用于外部链接的static的代替方法是经常使用匿名命名空间。与其将变量或函数标志为static,不如将其包装在一个无名命名空间中,如下所示:

import<iostream>;namespace{voidf();voidf(){std::cout<<"fn";}}

匿名命名空间中的实体可以在同一源文件中其申明之后的任何中央访问,但不能从其余源文件访问。这些语义与经常使用static关键字取得的语义相反。

正告:为了取得外部链接,倡导经常使用匿名命名空间,而不是static关键字。

拓展内容:外围言语个性的个性测试宏

C++20增加了个性测试宏,这些宏可用于检测编译器支持哪些外围言语个性。一切这些宏都以__cpp_或__has_cpp_扫尾。以下是一些示例:

留意:除非你正在编写十分通用的跨平台和跨编译器库,否则你很少须要这些个性测试宏。

免责声明:本文转载或采集自网络,版权归原作者所有。本网站刊发此文旨在传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及版权、内容等问题,请联系本网,我们将在第一时间删除。同时,本网站不对所刊发内容的准确性、真实性、完整性、及时性、原创性等进行保证,请读者仅作参考,并请自行核实相关内容。对于因使用或依赖本文内容所产生的任何直接或间接损失,本网站不承担任何责任。

标签: C

“深化了解-C-探求-的新畛域-static关键字和外围言语个性测试宏-20 (深化了解是病句吗?)” 的相关文章

深化探求模板编程的精华-从类型参数到智能推导-模板的艺术-C-把握 (深化探求模板范文)

深化探求模板编程的精华-从类型参数到智能推导-模板的艺术-C-把握 (深化探求模板范文)

类型模板参数 在示例中,模板有一个模板参数:存储在网格中的类型。编写类模板时,您须要在尖括号内指定参数列表,例如: 这个参数列表相似于函数或方法中的参数列表。与函数和...

揭秘性能与并发的机密-C-多线程编程 (性能与什么有关)

揭秘性能与并发的机密-C-多线程编程 (性能与什么有关)

当天咱们将深化讨论C++中的多线程编程,提醒多线程如何解锁性能后劲,提高程序的并发性能。 什么是多线程? 在计算机迷信中,多线程是指一个进程(程序的口头实例)中的多个线程同时口头。每个...

提升性能的新利器-17中的并行功能-C (提升 性能)

提升性能的新利器-17中的并行功能-C (提升 性能)

C++17扩展了STL(Standard Template Library,标准模板库)以支持并行算法。这意味着许多常见的算法,如std::sort、std::for_each、std::tran...

开源项目-助初学者进阶成长-C-八个 (开源项目有什么用)

开源项目-助初学者进阶成长-C-八个 (开源项目有什么用)

通过参与或阅读开源项目的源代码,你可以获得丰富的实践机会。实际的项目代码比简单的教程更具挑战性,可以帮助你深入理解 C++ 的各种概念和技术。 ThreadPool 一个简单...

了解圈套和无效经常使用技巧-言语变长参数-C (了解圈套和无线的区别)

了解圈套和无效经常使用技巧-言语变长参数-C (了解圈套和无线的区别)

C工具 变长参数列表 这局部解释了旧的C格调变长参数列表。了解这些内容很关键,由于你或许会在遗留代码中遇到它们。但是,在新代码中,你应该经常使用变参模板来成功类型安保的变长参数列表。...

与设计形式-可裁减的代码-C-打造可保养 (设计与形式的关系)

与设计形式-可裁减的代码-C-打造可保养 (设计与形式的关系)

引言 C++是一种弱小的编程言语,它提供了许多工具和库以支持面向对象编程和通用编程。设计形式是一种用于处置特定疑问的经过验证的处置打算。C++的灵敏性和设计形式的广泛...

深入学习-C-掌握内存管理的艺术 (深入学习习总书记系列讲话精神)

深入学习-C-掌握内存管理的艺术 (深入学习习总书记系列讲话精神)

简介 内存管理是学习任何编程语言的必备知识,C++也不例外。C++ 是一门功能强大、底层控制能力强的编程语言,尤其适用于系统级开发、游戏开发和嵌入式系统等领域。与一些更简单的编程语言相比,学...

原理-成功链表-代码与解析-C (成功定律是什么)

原理-成功链表-代码与解析-C (成功定律是什么)

链表是一种经常出现的数据结构,它由一系列节点组成,每个节点蕴含数据和指向下一个节点的指针。与数组不同,链表不是延续的内存空间,而是经过指针链接在一同。上方咱们将深化讨论如何经常使用C++成功链表,...