Russian Qt Forum

Программирование => С/C++ => Тема начата: Azazello от Август 19, 2021, 15:53



Название: constexpr
Отправлено: Azazello от Август 19, 2021, 15:53
class Example {
public:
    static const constexpr auto BASE_DATA_DIR = "../data/";
    static const constexpr auto ORIG_DATA_DIR = BASE_DATA_DIR + "images";
}

Вопрос, как сложить две строки во время компиляции.
invalid operands of types 'const char* const' and 'const char [7]' to binary 'operator+'


Название: Re: constexpr
Отправлено: kambala от Август 19, 2021, 19:11
до 20-го стандарта — разве что макросами через конкатенацию строковых литералов. либо отказаться от constexpr и хранить std::string.


Название: Re: constexpr
Отправлено: m_ax от Август 19, 2021, 20:09
Цитировать
до 20-го стандарта — разве что макросами через конкатенацию строковых литералов.
Да.. Или как вариант:
Код
C++ (Qt)
class Example {
public:
   static std::string BASE_DATA_DIR() {return "../data/"; };
   static std::string ORIG_DATA_DIR() {  return  BASE_DATA_DIR() + "images"; };
};
 


Название: Re: constexpr
Отправлено: _Bers от Январь 11, 2022, 14:57
Вопрос, как сложить две строки во время компиляции.

никак.
адреса строк - информация, которая не известна времени компиляции.
времени компиляции можно использовать имена указательных объектов,
но не их значения.

возможно, ты имел ввиду не сложить, а склеить?
тогда ответ: тоже никак.

склеивать текст можно во время препроцессирования,
но не во время компиляции.




Название: Re: constexpr
Отправлено: qtkoder777 от Январь 14, 2022, 11:48
до 20-го стандарта — разве что макросами через конкатенацию строковых литералов. либо отказаться от constexpr и хранить std::string.
Препроцессорную команду ## что отменили? Нах№й тогда этот стандарт.