mercredi 24 mai 2017

How to initialize an array in constructor by the argument?

How to initialize an array in constructor by the argument? I think type (&name)[size] syntax is pretty good and compiler maintainers can implement this easily. Is there a paragraph in the standard prohibiting such initialization?

Code:

struct Test
{
    char characters_[3];
    Test(char (&characters)[3]) : characters_(characters) {}
};

GCC version:

gcc (Ubuntu 5.4.0-6ubuntu1~16.04.4) 5.4.0 20160609

GCC output:

FAILED: /usr/bin/c++     -Wall -Wextra -Wconversion -pedantic -Wmissing-declarations -Wmissing-include-dirs -Wfloat-equal -std=c++11 -pg   -m32 -std=gnu++11 -MMD -MT CMakeFiles/Test.dir/test.cpp.o -MF CMakeFiles/http://ift.tt/2qiPKEh -o CMakeFiles/Test.dir/test.cpp.o -c /home/user/Desktop/programms/test/Test/test.cpp
In file included from /home/user/Desktop/programms/test/Test/test.cpp:1:0:
/home/user/Desktop/programms/test/Test/test.h: In constructor ‘Test::Test(char (&)[3])’:
/home/user/Desktop/programms/test/Test/test.h:38:54: error: array used as initializer
  Test(char (&characters)[3]) : characters_(characters) {}
                                                      ^
FAILED: /usr/bin/c++     -Wall -Wextra -Wconversion -pedantic -Wmissing-declarations -Wmissing-include-dirs -Wfloat-equal -std=c++11 -pg   -m32 -std=gnu++11 -MMD -MT CMakeFiles/Test.dir/main.cpp.o -MF CMakeFiles/http://ift.tt/2qNXP7k -o CMakeFiles/Test.dir/main.cpp.o -c /home/user/Desktop/programms/test/Test/main.cpp
In file included from /home/user/Desktop/programms/test/Test/main.cpp:4:0:
/home/user/Desktop/programms/test/Test/test.h: In constructor ‘Test::Test(char (&)[3])’:
/home/user/Desktop/programms/test/Test/test.h:38:54: error: array used as initializer
  Test(char (&characters)[3]) : characters_(characters) {}
                                                      ^

Aucun commentaire:

Enregistrer un commentaire