cari

Rumah  >  Soal Jawab  >  teks badan

c++ - Ruang nama yang tidak dinamakan tidak boleh diletakkan dalam .h

Ruang nama yang tidak dinamakan tidak boleh diletakkan di .h. Bolehkah anda berikan contoh mengapa ia tidak dibenarkan?
Saya tidak menemui sebarang contoh selepas banyak pertimbangan.

phpcn_u1582phpcn_u15822753 hari yang lalu903

membalas semua(1)saya akan balas

  • PHPz

    PHPz2017-05-16 13:23:09

    Kunci bergantung pada cara menggunakannya dan apa yang perlu dimasukkan ke dalam ruang nama yang tidak dinamakan Contohnya, jika anda meletakkan pembolehubah, akan ada masalah.

    //one.h
    #include <iostream>
    #include <typeinfo>
    
    namespace {
    class TestClass {
    };
    int i;
    }
    
    const std::type_info& one_get_TestClass_Info();
    const std::type_info& two_get_TestClass_Info();
    
    //one.cpp
    #include "one.h"
    const std::type_info& one_get_TestClass_Info()
    {
        i = 10;
        std::cout << "val: " << i << "   addr: " << &i << std::endl;
        return typeid(TestClass);
    }
    
    //two.cpp
    #include "one.h"
    #include <iostream>
    #include <typeinfo>
    using namespace std;
    
    const std::type_info& two_get_TestClass_Info()
    {
        std::cout << "val: " << i << "   addr: " << &i << std::endl;
        return typeid(TestClass);
    }
    //main.cpp
    
    #include "one.h"
    using namespace std;
    
    int main()
    {
        const std::type_info& t1 = one_get_TestClass_Info();
        const std::type_info& t2 = two_get_TestClass_Info();
        std::cout << "one has type: " << t1.name() << '\n'
                  << "two has type: " << t2.name() << '\n';
        if (t1 == t2) {
            cout << "same type";
        }
    
        return 0;
    }
    
    
    
    

    Keluaran ialah:

    val: 10   addr: 0x602200
    val: 0   addr: 0x602208
    one has type: N12_GLOBAL__N_19TestClassE
    two has type: N12_GLOBAL__N_19TestClassE
    

    Untuk butiran lanjut, lihat di sini: https://zsounder.github.io/20….

    balas
    0
  • Batalbalas