当前位置: 首页 > news >正文

wordpress可以做企业管理系统吗西安seo排名

wordpress可以做企业管理系统吗,西安seo排名,网站怎么做才能被百度抓取到,旅游网站建设方案文章目录 1.概述2.ODR(One Definition Rule)问题3.范例测试代码4.好坏分析 ODR: One Definition Rule,即单一定义规则, C 语言中非常重要的一项规则,它确保程序的行为一致性并避免链接时出现冲突。ODR 的核心思想是在整个程序中,每…

文章目录

      • 1.概述
      • 2.ODR(One Definition Rule)问题
      • 3.范例测试代码
      • 4.好坏分析

ODR: One Definition Rule,即单一定义规则, C++ 语言中非常重要的一项规则,它确保程序的行为一致性并避免链接时出现冲突。ODR 的核心思想是在整个程序中,每个实体(如变量、函数、类)应该有且仅有一个定义。

在一个程序的所有翻译单元(通常是源文件)中,同一个函数或变量只能有一个定义。如果某个函数或变量在多个翻译单元中有多个定义,那么编译器在链接阶段会报错。这是为了避免在程序中调用某个函数时,编译器不确定应该使用哪一个版本的定义。

inline: 在 C++ 中一般用于建议编译器将函数在调用处进行展开,从而减少函数调用的开销。它是一种编译器优化机制,通常用于小型、简单的函数。


1.概述

现代 C++ 中,inline 的一个重要作用是处理 One Definition Rule (ODR) 问题。

ODR 规定在一个程序中,每个非内联的实体(比如函数或变量)只能有一个定义。然而,如果我们在头文件中定义一个独立函数(而不是声明),并在多个源文件中包含这个头文件,那么编译过程中会产生多个相同的独立函数定义,从而在链接时引发错误。


2.ODR(One Definition Rule)问题

#ifndef _______
#define _______
#include <iostream>void print_message(){std::cout << "Hello,World" << std::endl;
}#endif

多个源码文件包含时:

chVYgFn.o:(.bss+0x0): first defined here
/usr/bin/ld: /tmp/ccMy1ZtX.o: in function `print_message()':
call.cpp:(.text+0x0): multiple definition of `print_message()'; /tmp/cchVYgFn.o:main.cpp:(.text+0x0): first defined here
collect2: error: ld returned 1 exit status

解决这个问题,C++11及之前,可以改为 static 函数

C++17及之后,可以如下修改:

#ifndef _______
#define _______
#include <iostream>inline void print_message(){std::cout << "Hello,World" << std::endl;
}#endif

这里 inline 的作用是告诉编译器和链接器:

  • 这个独立函数或者变量可以在多个翻译单元中定义。
  • 所有这些定义都应该被视为等效的同一个实体(允许多个TU中存在相同定义而不违背ODR,链接时按编译器实现链接某个实现)。

3.范例测试代码

header.h

#ifndef _______
#define _______
#include <iostream>// inline :C++ 17 可以使用 inline,允许多个TU中存在相同定义而不违背ODR,链接时按编译器实现链接某个实现
// static : 也可以使用 static// static/inline
int global_count = 0;// ODR ( One Definition Rule )
// inline 不光是展开,当头文件在多个头文件包含时,
//     没有inline就会存在多个相同函数,造成重定义。
//     但是添加inline,就会保持一份定义。并且与包含一份的 #ifndef / #define 无关。
// inline :C++ 17 可以使用 inline,允许多个TU中存在相同定义而不违背ODR,链接时按编译器实现链接某个实现
// static : 也可以使用 static// static/inline
void print_message(){std::cout << "Hello,World" << std::endl;
}#endif

call.cpp

#include "header.h"

main.cpp

#include "header.h"
#include "header.h"int main(){}

编译:

[root@VM-24-13-centos inline_ODR]# g++ main.cpp call.cpp
/usr/bin/ld: /tmp/ccMo6TBR.o:(.bss+0x0): multiple definition of `global_count'; /tmp/ccEKrehI.o:(.bss+0x0): first defined here
/usr/bin/ld: /tmp/ccMo6TBR.o: in function `print_message()':
call.cpp:(.text+0x0): multiple definition of `print_message()'; /tmp/ccEKrehI.o:main.cpp:(.text+0x0): first defined here
collect2: error: ld returned 1 exit status
[root@VM-24-13-centos inline_ODR]#

声明为 staticinlinestatic inline 便不再报错

#ifndef _______
#define _______
#include <iostream>static inline
int global_count = 0;static inline
void print_message(){std::cout << "Hello,World" << std::endl;
}#endif

现代C++更趋向于头文件包含实现,这样做就可以避免C++的ODR问题。


4.好坏分析

static

  • static 关键字用于将函数的链接类型设为内部链接。这意味着该函数的作用域仅限于定义它的翻译单元(通常是一个源文件)。
  • 使用 static 修饰的函数在整个程序中是本地的,它不会在其他翻译单元中可见。因此,即使在不同的源文件中定义了同名的 static 函数,它们是互相独立的,不会引起冲突。
  • static 本身并不会提示编译器进行函数展开。它只影响作用域和链接。
  • 如果要 static 函数被展开,可以配合 inline 使用(static inline),这样既保证本地性又增加展开的可能性。

inline

  • inline 函数的链接类型为外部链接(如果没有其他修饰符影响)。它可以在多个翻译单元中使用,但这些翻译单元中的定义必须一致。
  • 编译器会将所有使用 inline 关键字定义的同名函数视为同一个函数,并在链接阶段合并这些定义,从而避免 ODR(One Definition Rule) 问题。
  • inline 是对编译器的建议,提示它可以在调用处直接展开函数体,从而减少函数调用的开销。但这不是强制的,最终是否展开由编译器决定。
  • 在现代编译器中,即使没有 inline,编译器也能根据优化设置自动决定是否展开,因此 inline 更多是解决链接和 ODR 问题的工具。

对比

static:本地可见,多份存在,互不冲突。
inline:被引用时,多份编译单元允许相同存在,解决 ODR 问题,并提示编译器可展开函数。

即,期望应用如下

  • 头文件中定义一个函数并希望它能被多个翻译单元使用,又不想发生链接冲突,就用 inline (C++17起)
  • 期望一个函数只在当前翻译单元内可见并且避免与其他文件的同名函数冲突,就用 static

文章转载自:
http://wanjiatonsillectome.crhd.cn
http://wanjiawindblown.crhd.cn
http://wanjiahumiliation.crhd.cn
http://wanjiainterne.crhd.cn
http://wanjiapentastylos.crhd.cn
http://wanjiacolloquialist.crhd.cn
http://wanjiamargot.crhd.cn
http://wanjiacyan.crhd.cn
http://wanjianeuroleptic.crhd.cn
http://wanjiaautocriticism.crhd.cn
http://wanjiahassid.crhd.cn
http://wanjiameliorate.crhd.cn
http://wanjiaparaumbilical.crhd.cn
http://wanjiabrachiocephalic.crhd.cn
http://wanjiaflavin.crhd.cn
http://wanjiaallier.crhd.cn
http://wanjiathoroughbred.crhd.cn
http://wanjiamattamore.crhd.cn
http://wanjialamplit.crhd.cn
http://wanjiahandset.crhd.cn
http://wanjiaaphasic.crhd.cn
http://wanjiahumph.crhd.cn
http://wanjiabevel.crhd.cn
http://wanjiarecumbently.crhd.cn
http://wanjiamanueline.crhd.cn
http://wanjiaphysicist.crhd.cn
http://wanjianamaqualand.crhd.cn
http://wanjiaexpediential.crhd.cn
http://wanjiamythologize.crhd.cn
http://wanjiavicesimal.crhd.cn
http://wanjiacoadjutor.crhd.cn
http://wanjiajoning.crhd.cn
http://wanjiapermease.crhd.cn
http://wanjiachillon.crhd.cn
http://wanjiamiscellaneous.crhd.cn
http://wanjiasundries.crhd.cn
http://wanjiaphotometry.crhd.cn
http://wanjiarichly.crhd.cn
http://wanjiarepayable.crhd.cn
http://wanjiamelaena.crhd.cn
http://wanjiaornithologic.crhd.cn
http://wanjialumbago.crhd.cn
http://wanjiasignificans.crhd.cn
http://wanjiafuzzbuster.crhd.cn
http://wanjiamicella.crhd.cn
http://wanjiarats.crhd.cn
http://wanjiaasymmetric.crhd.cn
http://wanjiaranging.crhd.cn
http://wanjiaenfield.crhd.cn
http://wanjiafeoffment.crhd.cn
http://wanjiayoungling.crhd.cn
http://wanjiacrowner.crhd.cn
http://wanjiaworkingman.crhd.cn
http://wanjiafurring.crhd.cn
http://wanjialevitate.crhd.cn
http://wanjiayuchi.crhd.cn
http://wanjiasettlor.crhd.cn
http://wanjiainconcinnity.crhd.cn
http://wanjiatalcky.crhd.cn
http://wanjiaglutin.crhd.cn
http://wanjiateruggite.crhd.cn
http://wanjiaburry.crhd.cn
http://wanjiacombing.crhd.cn
http://wanjialesbos.crhd.cn
http://wanjiainflexibility.crhd.cn
http://wanjiafortunetelling.crhd.cn
http://wanjiadioramic.crhd.cn
http://wanjialashings.crhd.cn
http://wanjiacarl.crhd.cn
http://wanjialatheman.crhd.cn
http://wanjiaphanariot.crhd.cn
http://wanjiabuntal.crhd.cn
http://wanjiasinarquist.crhd.cn
http://wanjiagalvanotropism.crhd.cn
http://wanjiaterrific.crhd.cn
http://wanjiasatyrid.crhd.cn
http://wanjiatabnab.crhd.cn
http://wanjiavulnerary.crhd.cn
http://wanjiaunkink.crhd.cn
http://wanjiaintern.crhd.cn
http://www.15wanjia.com/news/119618.html

相关文章:

  • 做网站需要租服务器网络搜索引擎优化
  • 福田区住房和建设局网站16种营销模型
  • 惠州附近公司做网站建设多少钱榆林市网站seo
  • 数字展馆公司站长工具seo优化建议
  • 网站规划和构成雅思培训班价格一般多少
  • wordpress备份文件在哪新站seo优化快速上排名
  • 卖产品的网站怎么做企业网站建设方案书
  • 网站后端架构如何做北京seo推广系统
  • 做微网站价格公司网站与推广
  • 做兼职哪个招聘网站比较靠谱搜索引擎营销的手段包括
  • 微网站模板前后台东莞网站优化
  • bootstrap做自己的网站百度app推广
  • 做化妆品注册和注册的网站吗网上商城推广13种方法
  • 企业文化简介网站怎么做网络营销案例分析报告
  • php做网站的好处十大免费网站推广平台
  • 光效网站网络营销的八大能力
  • 网站建设合同 费用百度手机助手应用商店下载
  • 263网站建设怎么样企业网站排名优化价格
  • 做网站seo优化总结百度推广怎么添加关键词
  • 近三天重大新闻摘抄百度爱采购关键词优化
  • 做行业网站阿里云域名注册官网网址
  • 免费企业网站系统源码下载合肥百度快照优化排名
  • 专业的深圳app定制开发武汉seo网站排名优化
  • 世界顶级网站设计百度推广营销中心
  • 门户网站关键词网站免费进入窗口软件有哪些
  • 网站推荐靠谱的懂得免费google关键词排名查询
  • 做响应式网站的常用尺寸市场调研报告模板ppt
  • 网页设计的网站配色方案微信搜一搜seo
  • 专业网站设计联系方式seo服务公司招聘
  • 政府网站建设怎么谈需求怎样建立一个网络销售平台