我必须初始化函数本地静态常量吗?

问题描述 投票:2回答:1

我正在使用MS Visual Studio 2017,V。15.9.8。

我正在使用出色的JetBrains ReSharper Ultimate 2019.1.2 Build 191.0.20190603.142841。它在指示的位置给我警告:

#include <vector>
struct T
{
  std::vector<char> m;
  const char *f() const
  {
    static const char emptyData;         // ReSharper complains here
    return m.size() ? &m[0] : &emptyData;
  }
};

消息是

file.h:应初始化类型为'const unsigned char'的静态局部变量。这是非标准的Microsoft C ++扩展。

如果emptyData不是常量,则警告消失。>

该警告是错误的,因为所有静态数据(包括恒定的静态局部数据)都是按标准的零初始化的,对吗?

我正在使用MS Visual Studio 2017,V. 15.9.8。我正在使用出色的JetBrains ReSharper Ultimate 2019.1.2 Build 191.0.20190603.142841。它在指示的位置给我警告:#...

c++ static initialization const default-value
1个回答
0
投票

我相信是因为const,必须将常量变量初始化,如果该行是const char emptyData;,则对于未初始化的const变量会出现错误,因此我认为不是导致static修饰符问题。


0
投票

该警告是错误的,因为所有静态数据(包括恒定的静态局部数据)均按标准的零初始化,对吗?

© www.soinside.com 2019 - 2024. All rights reserved.