C++ odr用法 C++ odr用法案例详解
会会会飞的鱼 人气:0想了解C++ odr用法案例详解的相关内容吗,会会会飞的鱼在本文为您仔细讲解C++ odr用法的相关知识和一些Code实例,欢迎阅读和指正,我们先划重点:C++,odr,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; }
运行结果
加载全部内容