c++ - Ruang nama yang tidak dinamakan tidak boleh diletakkan dalam .h
phpcn_u1582
phpcn_u1582 2017-05-16 13:21:09
0
1
896

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_u1582
phpcn_u1582

membalas semua(1)
PHPzhong

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….

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan