Russian Qt Forum
Апрель 20, 2024, 08:21 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: constexpr  (Прочитано 2591 раз)
Azazello
Самовар
**
Offline Offline

Сообщений: 103


Просмотр профиля
« : Август 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+'
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4727



Просмотр профиля WWW
« Ответ #1 : Август 19, 2021, 19:11 »

до 20-го стандарта — разве что макросами через конкатенацию строковых литералов. либо отказаться от constexpr и хранить std::string.
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2094



Просмотр профиля
« Ответ #2 : Август 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"; };
};
 
Записан

Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..

Arch Linux Plasma 5
_Bers
Бывалый
*****
Offline Offline

Сообщений: 486


Просмотр профиля
« Ответ #3 : Январь 11, 2022, 14:57 »

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

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

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

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


Записан
qtkoder777
Частый гость
***
Offline Offline

Сообщений: 245


Просмотр профиля
« Ответ #4 : Январь 14, 2022, 11:48 »

до 20-го стандарта — разве что макросами через конкатенацию строковых литералов. либо отказаться от constexpr и хранить std::string.
Препроцессорную команду ## что отменили? Нах№й тогда этот стандарт.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.072 секунд. Запросов: 22.