我想與外部連接和不完整的類型聲明進行實驗,並寫了這個例子:C++的extern聯
Source.cpp:
//Source.cpp
class A {
public:
int a=10;
};
A* var1 = new A();
void printA(A* arg)
{
cout << arg->a << endl;
}
Source1.cpp:
//Source1.cpp
class A
{
public:
int b = 20;
int c = 30;
};
A* var2 = new A();
void printB(A* a)
{
std::cout << a->b;
}
主。 cpp:
//main.cpp
class A;
extern A* var1;
extern A* var2;
int main()
{
void printA(A*);
void printB(A*);
printA(var1); //Prints 10
printA(var2); //Prints 10
printB(var2); //Prints 10
return 0;
}
第一次撥打printA()
後,會按照我的預期打印「10」。但是爲什麼在printA()
和printB()
的第二次呼叫之後還打印了「10」?
所以這是未定義的行爲? – Nikita
@Nikita標準確實說這是未定義的行爲,但我認爲他們的意思是說它不合格,不需要診斷。如果一個不合格的NDR程序實際編譯並運行,則行爲未定義。 – Brian