gpt4 book ai didi

c++ - 内联构造函数和一个定义规则

转载 作者:太空狗 更新时间:2023-10-29 21:27:16 26 4
gpt4 key购买 nike

考虑以下源文件1.cpp

#include <iostream>

using namespace std;

struct X
{
X()
{
cout << "1" << endl;
}
};

void bar();

void foo()
{
X x;
}

int main()
{
foo();
bar();
return 0;
}

2.cpp

#include <cstdio>

struct X
{
X()
{
printf("2\n");
}
};

void bar()
{
X x;
}

从这些文件编译的程序是否格式正确?它的输出应该是什么?

我已经预料到由于违反一个定义规则或输出“1 2”而导致链接器错误。但是,当使用 g++ 3.4 和 VC 8.0 编译时,它会打印出“1 1”。
这怎么解释?

最佳答案

这确实违反了 ODR (3.2) - 具体来说,您可以有多个内联函数定义,但这些定义必须相同 (3.2/5) - 并导致未定义的行为,因此任何事情都可能发生,编译器/linker 不需要诊断。您看到该行为的最可能原因是函数调用是内联的并且不参与链接,因此不会发出链接错误。

关于c++ - 内联构造函数和一个定义规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9389977/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com