首页
学习
活动
专区
圈层
工具
发布

Google C++ 编程风格指南(二):作用域

匿名名字空间 在 .cc 文件中, 允许甚至鼓励使用匿名名字空间, 以避免运行时的命名冲突: namespace { // .cc 文件中 //...// 使用本名字空间内的符号 EOF } // namespace 然而, 与特定类关联的文件作用域声明在该类中被声明为类型, 静态数据成员或静态成员函数, 而不是匿名名字空间的成员....定义在同一编译单元的函数, 被其他编译单元直接调用可能会引入不必要的耦合和链接时依赖; 静态成员函数对此尤其敏感. 可以考虑提取到新类中, 或者将函数置于独立库的名字空间内....如果你必须定义非成员函数, 又只是在 .cc 文件中使用它, 可使用匿名 namespaces`或 “static` 链接关键字 (如 static int Foo() {...})...译者 (YuleFox) 笔记 cc 中的匿名名字空间可避免命名冲突, 限定作用域, 避免直接使用 using 关键字污染命名空间; 嵌套类符合局部使用原则, 只是不能在其他头文件中前置声明, 尽量不要

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

    容器逃逸成真:从CTF解题到CVE-2019-5736漏洞挖掘分析

    设想这样一种情况:假如我们创建一个沙盒,其中的init进程fork一个子进程,然后将/tmp/xxx目录绑定挂载到/proc/[init进程PID]/ns,接着在这个目录下创建符号链接,将各个命名空间链接到.../proc/[PID]/exe:它是一种特殊的符号链接,又被称为magic links(为什么将这类符号链接叫做magic links呢?...例如,在今年的欧洲开源峰会(Open Source Summit Europe 2019)上,有议题展示了“命名空间”与“符号链接”两个概念放在一起出现的一系列问题[16],感兴趣的读者可以关注一下。...然而,它们并非真正的符号链接,或者说,它们是一种特殊的符号链接,叫做magic links。首先,我们可以借助一个小实验来观察它们与普通符号链接的不同: ?...其中很重要的一点是,当进程去操作一个这样的符号链接时,例如“打开”操作,Linux内核不会按照普通符号链接处理方式在文件系统上做路径解析,而是会直接调用专属的处理函数并返回对应文件的文件描述符。

    3.7K20

    Linux无文件渗透执行ELF

    02 技术核心 这里向大家介绍一个linux系统的底层调用函数memfd_create(2),它在内核3.17中引入,会创建一个匿名文件并返回一个文件描述符指向它,该文件表现和常规文件类同, 可以进行修改...对于该匿名文件的命名man信息中的解释如下: ---- The name supplied in name is used as a filename and will be displayed as...have the same name without any side effects. ---- 类似于下面这样,当我们在虚拟文件系统中查看该进程信息时,在memfd:后面会出现对于该文件名称,甚至对于匿名文件的命名可以是空的...这里还有一个问题,如何将elf二进制文件写入到创建的文件当中,@MagisterQuis这里使用open函数将$FH内容添加进创建的匿名文件$fd当中,而$FH通过perl转化自要执行的elf文件,这就是该脚本的第二部分...可以看到我们的elf文件最终以匿名文件的方式在内存中被加载执行了,从匿名文件运行的程序与运行于普通文件的程序之间唯一真正的区别是/proc/pid/exe符号链接。

    6.1K80

    python调用自己写的py文件

    那就把需要调用的那个目录添加一下,比如调用C:\xxx\a.py 那就添加一下c:\xxx路径(windows的路径和linux的路径符号不同\\,/,注意区别) 然后import a就行了,前面写r是为了告诉...解决方法是添加一个空的__init__.py文件(用于定义包的属性和方法,可以为空),表示这是一个包,比如这样,声明了aaa为一个包,a是内部的方法 ?...文件会忽略文档信息 模块导入时内部的原理 import可导入的对象可以是以下类型: 模块文件(.py文件) C或C++扩展(已编译为共享库或DLL文件) 包(包含多个模块) 内建模块(使用C编写并已链接到...Python解释器中) 理解为后缀就是.py、.pyo、.pyc、.pyd、.so、.dll 解释器工作: 1.根据导入的文件名创建命名空间(用来访问文件内部属性与方法) 2.在命名空间内执行源代码 3...c 把b的属性c直接导入命名空间 发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/100256.html原文链接:

    6.9K40

    Java基础知识笔记

    'a'  '+'  '我'   '5'         字符中数字和整数的数字冲突     为了以示区分   每一个字符的前后各加单引号     为什么英文和符号和数字是一个字节     为什么中文是两个字节...必须指定数据类型  变量空间的名字        变量空间   里面只能存储一个内容(值  引用)        变量空间内的内容可以改变     创建变量是 需要注意命名的问题     命名的规则...        字母(大小写敏感)  数字(0-9不允许开头)  符号(英文符号 _ $)  中文(不推荐)     命名的规约         类名字    首字母大写  如果两个以上的单词  ... 空的         空的变量空间不能拿来使用   编译错误         byte x;//声明一个变量空间  空间的名字是x  空间内要求存储的类型是byte整数         x =...1;//将一个1赋值到x空间内进行存储         计算机底层做了什么事情         1.x是什么?

    32930

    K8s多租户场景下的多层级namespace规则解析

    任何一个命名空间内自由使用,但与其他命名空间完全隔离。...这样,在没有特权的 用户可以创建“常规”对象(例如 Pod 和服务)之前,可以使用适当的策略防止非特权用 户创建某些资源对象。...这意味着,每当团队需要新的命名空 间时,他们都必须向集群管理员提出要求。尽管这对于小型组织来说可能是可以接受的,但 是随着组织的发展,它会产生不必要的麻烦。...让我们来看看 HNC 的作用。想象一下我没有命名空间创建特权,但是我可以查看命名空 间 team-a 并在其中创建子命名空间。...请注意,由于子命名空间只是常规的Kubernetes 命名空间,因此所有子命名空间名称仍必须是唯一的。

    2.6K41

    C++ 作用域使用规范建议

    **优点:**命名空间提供了(可嵌套)命名轴线(name axis,注:将命名分割在丌同命名空间内),当然,类也提供了(可嵌套)的命名轴线(注:将命名分割在丌同类的作用域内)。...使用名字空间应该坚持以下几点规范: (1)推荐和提倡使用匿名名字空间 // .cpp文件中 namespace { // 命名空间的内容无需缩进 enum { UNUSED, EOF, ERROR...}; // 经常使用的符号 bool AtEof() { return pos_ == EOF; } // 使用本命名空间内的符号EOF } // namespace 匿名名字空间结束时用注释...使用匿名名字空间的作用主要是将匿名名字空间中的成员的作用域限制在源文件中,其作用域与使用static关键字类似,但是与static关键字不同的是:包含在匿名名字空间中的成员(变量或者函数)具有外部连接特性...5.小结 (1)cpp源文件中的匿名名字空间可避免命名冲突、限定作用域,避免直接使用using指示符污染命名空间; (2)嵌套类符合局部使用原则,只是不能在其他头文件中前置定义,尽量不要设为public

    1.2K20

    高性能PHP7【笔记】

    2.命名空间与use关键字批量声明 非混合模式的use声明:use 命名空间\{类1,类2},use function 命名空间\(方法1,方法2),use const 命名空间\{常量1,常量2}...类1,命名空间2\类2} 3.匿名类 匿名类的声明与使用是同时进行的,具备其他类所具备的所有功能,差别在于匿名类没有类名 匿名类的一次性小任务代码流程对性能提升帮助很大,不必将整个类写完后再使用它 语法...,包括数值(字符串型、整型、浮点型等)、数组、对象 当符号两边相等时返回0 当符号右边大于符号左边时返回-1 当符号左边大于符号右边时返回1 可以用于书写清晰易读的用于usort、uasort、uksort...中的session配置 4.Unserialize函数引入过滤器 三、PHP7应用性能提升 A.HTTP Server优化 1.缓存静态文件 2.HTTP持久链接:表示一条TCP/IP链接上承载着多个上下行请求...,右大括号应该在类结束后新起一行 2.类的方法和函数命名应该是驼峰式的,参数和紧跟着的逗号之间不应有空格 3.命名空间的声明之后应该空一行 4.Visibility类的所有属性都应该明确指出其可见性并且属性名应该是驼峰式的

    93720

    Google C++编程风格指南(三)之作用域的相关规范

    优点:命名空间提供了(可嵌套)命名轴线(name axis,注:将命名分割在丌同命名空间内),当然,类也提供了(可嵌套)的命名轴线(注:将命名分割在丌同类的作用域内)。...在头文件中使用不具名的空间(匿名名字空间)容易违背C++的唯一定义原则(One Definition Rule (ODR))。...使用名字空间应该坚持以下几点规范: (1)推荐和提倡使用匿名名字空间 // .cpp文件中 namespace { // 命名空间的内容无需缩进 enum { UNUSED, EOF, ERROR...}; // 经常使用的符号 bool AtEof() { return pos_ == EOF; } // 使用本命名空间内的符号EOF } // namespace 不具名名字空间结束时用注释/...使用匿名名字空间的作用主要是将匿名名字空间中的成员的作用域限制在源文件中,其作用域static关键字类似,但是其static关键字不同的是:包含在匿名名字空间中的成员(变量或者函数)具有外部连接特性,而用

    1.3K30

    JavaScript 匿名函数几种执行方式

    ){ //代码 })(); 解释:这是相当优雅的代码(如果你首次看见可能会一头雾水:)),包围函数(function(){})的第一对括号向脚本返回未命名的函数,随后一对空括号立即执行返回的未命名函数...函数表达式 var fnName = function () {…};使用function关键字声明一个函数,但未给函数命名,最后将匿名函数赋予一个变量,叫函数表达式,这是最常见的函数表达式语法形式。...匿名函数:function () {}; 使用function关键字声明一个函数,但未给函数命名,所以叫匿名函数,匿名函数属于函数表达式,匿名函数有很多作用,赋予一个变量则创建函数,赋予一个事件则成为事件处理程序或创建闭包等等...(note:都是英文符号) 加括号是最安全的做法,因为!、+、-等运算符还会和函数的返回值进行运算,有时造成不必要的麻烦。 不过这样的写法有什么用呢?...发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/186211.html原文链接:https://javaforall.cn

    1.1K30

    【C++】C++基础

    (包含头文件后,也需要对应的方法才能使用头文件命名空间内的定义)。...对于命名空间内的定义的量,每次使用都需要以上文第一种的方式来使用,无疑非常繁琐,我们最初使用命名空间的目的是防止命名冲突的问题,如果一个项目,我们能确保某一个量名字不会冲突或者冲突概率很小,并且这个量多次使用...,这样该命名空间内的所有量可以直接使用。...会复用C语言的一些符号,比如前面的>,这里引用也和取地址使用了同一个符号&,大家注意使用方法角度区分就可以。...(因为链接时看到有函数声明,编译器会去符号表找到定义的地址来跳转,但是因为加了inline,函数会替换展开,因此不会将地址存到符号表内,自然无法找到地址;此外我们一般是包包含声明的头文件,因此也无法直接找到定义

    39201

    让JS代码Level提升的忍者秘籍(实用)

    注意:以下取整方法适用于32位有符号整数(有符号整数使用 31 位表示整数的数值,用第 32 位表示整数的符号,0 表示正数,1 表示负数。...// 代码演示: 11.23^0 -> 11 -11.23^0 -> -11 自动执行匿名函数(OS:不走寻常路) 自动执行匿名函数: 解释:即定义和调用合为一体的函数。...我们创建了一个匿名的函数,并立即执行它,由于外部无法引用它内部的变量,因此在执行完后很快就会被释放,关键是这种机制不会污染全局对象。...作用:创建一个命名空间只要把自己所有的代码都写在这个特殊的函数包装内,外部就不能访问。...// 代码演示: // 区间内的随机数 function RandomNumber(min, max) {   return (min||0) + Math.random() * ((max||1) -

    74810

    【C++】学完c语言后的c++基础知识补充!(命名空间、输入和输出、缺省函数、函数重载、引用、内联函数代替宏、nullptr代替NULL)

    命名空间 1. 定义 出现的意义:解决各种函数、关键词和类的名称冲突问题。 定义方式:namespace + 命名空间的名字 + { } (注意!}...访问 命名空间内部可直接访问,外部需指定出他属于的命名空间。...指针和引用的区别(精简三点!) 引用不能指向空值(null),而指针可以。 引用在使用时不需要解引用操作(不需要 * 符号),而指针需要。 引用在定义时必须初始化,而指针可以在后续指向不同的对象。...inline是一种以空间换时间的做法,省去调用函数栈帧的开销。 inline不建议声明和定义分离,这样会导致链接错误。...因为inline既要要被展开,就没有函数地址了,链接就会找不到 2. c++替代宏的方法 常量定义 :换用const来修饰 函数定义: 换用内联函数 七. nullptr与NULL NULL 预处理后

    20210

    初级Java必看的数据类型与常量变量

    3、变量空间在创建的时候必须指定数据类型,以及变量空间的名字 4、变量空间内只能储存一个变量内容(值或者引用)。...2、创建变量的注意事项1、命名的规则 关于命名的规则,这里不推荐使用中文,因为他可能显得不专业,符号的话有两个(英文符号 _ $),数字还好,就是不允许用数字开头,用英文字母命名是要群分大小写的...2、命名的规约 类名字建议首字母大写,如果有两个以上的单词,所有首字母都大写比如BigDog 变量名建议首字母大写,如果有两个以上的单词,之后的首字母大写比如bigDog...遵循驼峰式命名规约所有名字都需要见名知义,为了增强程序的可读性。...2、变量空间创建后是没有默认的内容也就是空的。 3、空的变量空间不能拿来使用否则编译错误。

    30950

    【Linux】基于管道进行进程间通信

    例如内存池,内存池是提前向操作系统一次性申请一大片内存,供我们用户使用,这就可以有效减少我们调用系统接口的次数,因为系统调用是有成本的!因为涉及到操作系统帮我们申请空间、做空间内部的调整等等。...命名管道 (1)命名管道的系统接口 上面我们学到的匿名管道是没有名字的,因为打开那个文件的时候并没有告诉我们文件名,也就是管道并没有命名。...参考代码链接为:命名管道使用. 三、初识日志 1....常见的日志等级有: Info:常规消息 Warning:警告信息 Error:比较严重,可能需要立即处理 Fatal:致命问题 Debug:调试 那么我们上面实现的使用命名管道中,我们看见有许多的 perror...所以我们下面实现一个简单的日志函数,引入到命名管道的代码中。 参考代码链接为:日志. 其中补充知识如下。 2.

    31210
    领券