千家信息网

C++中odr怎么用

发表于:2025-02-01 作者:千家信息网编辑
千家信息网最后更新 2025年02月01日,这篇文章主要介绍了C++中odr怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。// The main module. File:
千家信息网最后更新 2025年02月01日C++中odr怎么用

这篇文章主要介绍了C++中odr怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

// The main module. File: odr_test1.cpp  #include  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  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 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  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怎么用"这篇文章对大家有帮助,同时也希望大家多多支持,关注行业资讯频道,更多相关知识等着你来学习!

0