C++ odr用法案例详解

 更新时间:2021年09月13日 11:36:55   作者:会会会飞的鱼  
这篇文章主要介绍了C++ odr用法案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
// The main module. File: odr_test1.cpp 
 
#include <iostream>
 
void module1_print(); // declaration of an exeternal function
 
inline int f1()
{
	return 4;
}
 
class A
{
public:
	static double f()
	{
		return 4.1;
	}
};
 
const double C = 4.2;
 
constexpr double E = 4.5;
 
void print()
{
	std::cout << "main f1(): " << f1() << std::endl;
	std::cout << "main A::f(): " << A::f() << std::endl;
	std::cout << "main C: " << C << std::endl;
	std::cout << "main E: " << E << std::endl;
}
 
int main()
{
	module1_print();
	print();
 
	int i;
	std::cin >> i;	
}
 
// File: module1.cpp
 
#include <iostream>
 
inline int f1()
{
	return 3;
}
 
class A
{
public:
	static double f()
	{
		return 3.1;
	}
};
 
const double C = 3.2;
 
constexpr double E = 3.5;
 
void module1_print()
{
	std::cout << "module1 f1(): " << f1() << std::endl;
	std::cout << "module1 A::f(): " << A::f() << std::endl;
	std::cout << "module1 C: " << C << std::endl;
	std::cout << "module1 E: " << E << std::endl;
}

1、在VS2017上运行的结果为:

2、使用clang进行编译

clang++ module1.cpp odr_test1.cpp

 运行结果:

若进行下面的编译:

clang++ odr_test1.cpp module1.cpp

 则结果如下 

3、使用gcc编译

g++ module1.cpp odr_test1.cpp -std=c++11

 

若进行如下编译

g++ odr_test1.cpp module1.cpp -std=c++11

二、如何解决这个问题

// The main module. File: odr_test2.cpp
#include <iostream>
void module2_print(); // declaration of an external function
 
namespace
{
inline int f1()
{
return 4;
}
 
class A
{
public:
static double f()
{
return 4.1;
}
};
}
 
const double C = 4.2;
constexpr double E = 4.5;
 
void print()
{
std::cout << "main f1(): " << f1() << std::endl;
std::cout << "main A::f(): " << A::f() << std::endl;
std::cout << "main C: " << C << std::endl;
std::cout << "main E: " << E << std::endl;
}
 
int main()
{
module2_print();
print();
 
int i;
std::cin >> i;
}
// File: module2.cpp
 
#include <iostream>
 
namespace
{
inline int f1()
{
return 3;
}
 
class A
{
public:
static double f()
{
return 3.1;
}
};
}
 
const double C = 3.2;
constexpr double E = 3.5;
 
void module2_print()
{
std::cout << "module2 f1(): " << f1() << std::endl;
std::cout << "module2 A::f(): " << A::f() << std::endl;
std::cout << "module2 C: " << C << std::endl;
std::cout << "module2 E: " << E << std::endl;
}

运行结果

 

到此这篇关于C++ odr用法案例详解的文章就介绍到这了,更多相关C++ odr用法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 基于OpenCv的运动物体检测算法

    基于OpenCv的运动物体检测算法

    这篇文章主要为大家详细介绍了基于OpenCv的运动物体检测算法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-01-01
  • C++ 学习之旅三 我和超级玛丽有个约会

    C++ 学习之旅三 我和超级玛丽有个约会

    学习了c++有一周有余了吧,感谢孙鑫老师的视频教程,让我   对C++有了基本的了解,并理解到C++与.net 的许许多多的区别,更要感谢网民为programaking的人,会为我提供了超级玛丽制作揭秘 这套宝贵的教程,让我 做做出了这个项目,对c++ 有了一个更深层次的认识
    2012-11-11
  • OpenCV实现拼图算法

    OpenCV实现拼图算法

    这篇文章主要为大家详细介绍了OpenCV实现拼图算法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-07-07
  • C语言题目:有多少张桌子--并查集

    C语言题目:有多少张桌子--并查集

    并查集是一种用于管理分组的数据结构。它具备两个操作:(1)查询元素a和元素b是否为同一组 (2) 将元素a和b合并为同一组,需要的朋友可以参考下
    2021-09-09
  • 用C语言实现计算器功能

    用C语言实现计算器功能

    这篇文章主要为大家详细介绍了用C语言实现计算器功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-10-10
  • 详解约瑟夫环问题及其相关的C语言算法实现

    详解约瑟夫环问题及其相关的C语言算法实现

    这篇文章主要介绍了详解约瑟夫环问题及其相关的C语言算法实现,也是ACM当中经常会引用到的基础题目,文中共介绍了三种C语言解答,需要的朋友可以参考下
    2015-08-08
  • C++空类及没有成员变量的类的大小实例分析

    C++空类及没有成员变量的类的大小实例分析

    这篇文章主要介绍了C++空类及没有成员变量的类的大小,对于初学者更好的了解C++的指针及类的存储结构很有帮助,需要的朋友可以参考下
    2014-07-07
  • C++深入探究继承的概念与使用

    C++深入探究继承的概念与使用

    继承是C++面向对象编程中的一门。继承是子类继承父类的特征和行为,或者是继承父类得方法,使的子类具有父类得的特性和行为。重写是子类对父类的允许访问的方法实行的过程进行重新编写,返回值和形参都不能改变。就是对原本的父类进行重新编写,但是外部接口不能被重写
    2022-05-05
  • 你不知道的C++中namespace和using的用法实例

    你不知道的C++中namespace和using的用法实例

    在C++语言编写的程序中,变量和函数等的作用范围是有一定限制的,下面这篇文章主要给大家介绍了一些你不知道的C++中namespace和using的用法,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2022-12-12
  • c病毒程序原理分析(防范病毒 c语言小病毒示例)

    c病毒程序原理分析(防范病毒 c语言小病毒示例)

    这篇文章主要介绍了病毒程序原理,写个小程序做演示,大家可以参考这个以防中相似C病毒
    2013-12-12

最新评论