Qt vs constexpr строковый литерал - PullRequest
0 голосов
/ 18 мая 2019

Есть ли способ определить как статический строковый литерал constexpr в Qt?Т.е. что-то вроде следующего:

class X
{
   static constexpr QString tag = "mytag";
};

Ответы [ 2 ]

1 голос
/ 19 мая 2019

Я сделал то, что рекомендовал Джеспер в своем комментарии, я использовал QLatin1String. Но я использовал его через небольшой вспомогательный класс, чтобы избежать вызова strlen () в QLatin1String:

struct ConstLatin1String : public QLatin1String
{
    constexpr ConstLatin1String(const char* const s) : 
        QLatin1String(s, static_cast<int>(std::char_traits<char>::length(s))) {}
};

Это позволяет сделать:

static constexpr ConstLatin1String mystring = "foo";
1 голос
/ 18 мая 2019

Учитывая, что QString - (потенциально) строка, выделенная в куче, и вы не можете выделить память в constexpr коде, нет.Во время компиляции он действителен не более, чем std::string.

...