0

我最近调试了一些像这样的遗留代码:

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等于。C++ 标准是否没有保证在访问之前必须初始化局部静态变量,或者这是编译器的错误?0SomeMethod

PSvalue数组永远不会在 SomeDataLength 构造函数之外修改。编译器是来自 Visual Studio 2010 的编译器。

4

0 回答 0