问题C ++ 11是否支持初始化数组,因此不支持stl容器,其初始化结构列表再次包含类似std :: string的C ++类型。请参阅下面的代码。
我正在使用的编译器不抱怨:gcc版本4.8.2(Ubuntu 4.8.2-19ubuntu1)
代码似乎运行得很完美。
Valgrind不抱怨。
但我们正在评估的静态分析工具确实抱怨:
const MyStruct02 myArr02 [] = { {“Value 0”,0,-1,41943040},
分析仪指的是:http://cwe.mitre.org/data/definitions/457.html
代码:
#include <string>
#include <iostream>
struct MyStruct01
{
const char* description;
int val1;
int val2;
int val3;
};
struct MyStruct02
{
std::string description;
int val1;
int val2;
int val3;
};
int main(int argc, const char* argv[])
{
const MyStruct01 myArr01[] = {
{"Value 0", 0, -1, 41943040},
{"Value 1", 10, 5000000, 10485760},
{"Value 2", 20, 1000000, 409600 },
{"Value 3", 30, 500000, 204800 },
{"Value 4_0", 40, 200000, 102400 }
};
std::cout << myArr01[0].description << std::endl;
const MyStruct02 myArr02[] = {
{"Value 0", 0, -1, 41943040},
{"Value 1", 10, 5000000, 10485760},
{"Value 2", 20, 1000000, 409600 },
{"Value 3", 30, 500000, 204800 },
{"Value 4_0", 40, 200000, 102400 }
};
std::cout << myArr02[0].description << std::endl;
return 0;
}
经过一些令人费解的事后,我发现用原生的“const char *”替换结构中的std :: string会删除未初始化的变量警告。
所以我的问题:静态分析器工具是对还是错了?
感谢您的帮助。
亨利