作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
打印出如下内容
0 2
它应该打印出来
1 2
我尝试逐行查看,直到 UtilsA.cpp 通过其 GetNumber() 函数返回 0 时结束。它与 UtilsC.cpp 完全相同,并且返回正确的数字。我能做些什么来解决这个问题,为什么会这样?
namespace UtilsA {
int GetSingleNumber();
}
#include "UtilsA.h"
namespace {
class A {
public:
int GetNumber() const { return Number; }
private:
int Number = 1;
};
A SingleNumberA;
}
int UtilsA::GetSingleNumber() {
return SingleNumberA.GetNumber();
}
namespace UtilsB {
int GetSingleNumberA();
int GetSingleNumberC();
}
#include "UtilsB.h"
#include "UtilsA.h"
#include "UtilsC.h"
namespace {
class B {
public:
B() : NumberA( UtilsA::GetSingleNumber() ), NumberC( UtilsC::GetSingleNumber() ) {}
int GetNumberA() const { return NumberA; }
int GetNumberC() const { return NumberC; }
private:
int NumberA;
int NumberC;
};
B SingleNumberB;
}
int UtilsB::GetSingleNumberA() {
return SingleNumberB.GetNumberA();
}
int UtilsB::GetSingleNumberC() {
return SingleNumberB.GetNumberC();
}
namespace UtilsC {
int GetSingleNumber();
}
#include "UtilsC.h"
namespace {
class C {
public:
int GetNumber() const { return Number; }
private:
int Number = 2;
};
C SingleNumberC;
}
int UtilsC::GetSingleNumber() {
return SingleNumberC.GetNumber();
}
#include <iostream>
#include "UtilsB.h"
int main() {
std::cout << UtilsB::GetSingleNumberA() << " "
<< UtilsB::GetSingleNumberC() << std::endl;
}
最佳答案
我很好奇,因为我不明白问题的原因,但所有学分都应该转到 drescherjm ,我只是在这里确认他的回答。
问题可以从代码中重现并按照 isocpp.org/wiki/faq/ctors#static-init-order-on-first-use 中的说明进行操作它可以解决。将 UtilsC.h 替换为:
namespace {
class C {
public:
int GetNumber() const { return Number; }
private:
int Number = 2;
};
C& SingleNumberC() {
static C* ans = new C();
return *ans;
}
}
int UtilsC::GetSingleNumber() {
return SingleNumberC().GetNumber();
}
并为 UtilsB.h 做同样的事情,而不是它应该工作的。
关于c++ - 这将打印出什么,为什么?你会怎么修? [C++],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44741818/
我是一名优秀的程序员,十分优秀!