Согласно GCC 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5) Мне не хватает фигурную скобку в инициализации массива в следующем коде:Действительно ли требуются фигурные скобки вокруг инициализации?
#include <iostream>
#include <boost/array.hpp>
#include <array>
int main(){
int plain[] = {1,2,3,4,5};
std::array <int, 5> std_arr = {1,2,3,4,5}; // warning, see below
boost::array<int, 5> boost_arr = {1,2,3,4,5}; // warning, see below
std::cout << plain[0] << std_arr[1] << boost_arr[2] << std::endl;
}
> g++ test.cc -Wall -Wextra -pedantic --std=c++0x test.cc: in function »int main()«: test.cc:7:47: warning: curly braces missing around initialization for »std::array::value_type [5] {aka int [5]}« [-Wmissing-braces] test.cc:8:47: warning: curly braces missing around initialization for »int [5]« [-Wmissing-braces]
По-видимому (GCC missing braces around initializer) это ошибка в GCC, даже в немного другом контексте. Ответы отличаются от «файла сообщения об ошибке» на «просто отключить предупреждение».
Однако, в контексте std::array
или boost::array
, является ли это предупреждение излишним, или я пропускаю что-то важное?
(я, вероятно, добавить дополнительные скобки вместо отключения предупреждения, но мне интересно, о последствиях)
Это предупреждение. Если это было «необходимо», это было бы ошибкой. – geoffspear
не должно быть 'std :: array
Alex
@Alex Нет, но 'std :: array arr {1,2,3,4,5};' будет законным. –