为什么全局变量没有用字符串初始化我在extern变量中给出的内容

sen*_*mar 2 c++ powerpc

//s_request_view() constructor is declared as below
namespace Identity_VIEW
{
Published_view_identity s_request_view("SAMPLE");
};

//The constructor is called in another source file as below,
bind_view(Identity_VIEW::s_request_view);
Run Code Online (Sandbox Code Playgroud)

这个相同的代码在Windows上工作正常,但在SBC(PowerPC)上,s_request_view作为NULL传递.

谁能帮助我找出它为什么表现不同?

Sad*_*ido 6

我想,这里的答案是编译器不保证全局变量初始化的顺序.如果你的bind_view是从另一个全局变量的构造函数调用的 - 那你就会有一个浮动bug.

尝试使用以下方法:

namespace Identity_VIEW
{
   Published_view_identity & getRequestView()
   {
      static Published_view_identity s_request_view ("Sample");
      return s_request_view;
   }
}

...
bind_view(Identity_VIEW::getRequestView());
Run Code Online (Sandbox Code Playgroud)

这有助于解决全局变量初始化的顺序.不过,这个解决方案不是线程安全的(如果你关心的话)......