本地静态变量初始化 - Visual Studio 2010的错误?

时间:2013-04-15 13:39:27

标签: c++ visual-studio-2010 initialization static-variables

我最近调试了一些遗留代码:

template<size_t count>
struct SomeData
{
    char m_data[count];
};

template<>
struct SomeData<0>
{
};

template<int n>
struct SomeDataLength : public SomeDataLength<n-1>
{
    SomeDataLength(){ value[n] = sizeof(SomeData<n>); }
};

template<>
struct SomeDataLength<0>
{
    SomeDataLength(){ value[0] = sizeof(SomeData<0>); }

    size_t value[10];
};

template<typename T>
void SomeClass::SomeMethod(size_t count)
{
    ...

    static SomeDataLength<5> dataLength;

    size_t length = dataLength.value[count]; // sometimes may be 0 on the method first call

    ...
}

令我惊讶的是,我发现length变量在0第一次调用时有时(很少)等于SomeMethod。 C ++标准是否保证在访问之前必须初始化本地静态变量,或者这是编译器的错误?

P.S。永远不会在SomeDataLength构造函数之外修改value数组。编译器是Visual Studio 2010中的编译器。

0 个答案:

没有答案