Komplexe Konstruktorinitialisierung für statische Const Container
Posted: 22 Feb 2025, 00:27
In meiner Header -Datei in einem Klassenkörper erkläre ich einen Vektor von Tupeln, bei dem alles konstant ist. Dies sind nur Daten, die ich durchgehen werde, während ich eine Aufgabe mache ... < /p>
Dies löst einen Klang-Tidy Fehler cert-ERR58-CPP ...
aus
Ich erhalte, dass es Fälle gibt, in denen ein Vektor möglicherweise keinen Platz zum Speichern der Daten findet. Hier gibt es keine Möglichkeit für mich, es zu versuchen/zu fangen. Das fühlt sich trotzdem übertrieben an. Was ist die beste Lösung hier ...? > ... < /p>
Bearbeiten: Hier ist der Code, für den ich mich entschieden habe. Keine Quelldateizusätze. Dies ist die Header -Datei ... < /p>
Code: Select all
class Foo {
public:
...
static const std::vector _data;
< /code>
In der entsprechenden Quelldatei bevölkern ich die Daten ... < /p>
const std::vector
Foo::_data
{
std::make_tuple("One", 1),
std::make_tuple("Two", 2),
...
std::make_tuple("Many", 10)
};
aus
Code: Select all
/path/to/src/Foo.cpp:783:14: warning: initialization of '_data' with static storage duration may throw an exception that cannot be caught [cert-err58-cpp]
Foo::_data
^
/path/to/gcc-9.2.0/lib/gcc/x86_64-redhat-linux/9.2.0/../../../../include/c++/9.2.0/bits/stl_vector.h:622:7: note: possibly throwing constructor declared here
vector(initializer_list __l,
^
Bearbeiten: Hier ist der Code, für den ich mich entschieden habe. Keine Quelldateizusätze. Dies ist die Header -Datei ... < /p>
Code: Select all
static constexpr std::array _data {
{
{{"One", 1},
{"Two", 2},
...
{"Ten", 10}}
};