@pixik

Почему не работает what() const?

код:
#include <iostream>
using namespace std;
#include <string>
const char* what() const
{
	string err = string("hello");
	return err.c_str();
}
int main() {
	cout << what() << endl;
	return 0;
}

С const не работет, а без const работает. В чем дело? Ведь я в этом методе не меняю поля класса.
ideone.com/aVSrLC
  • Вопрос задан
  • 141 просмотр
Решения вопроса 2
GavriKos
@GavriKos
Ведь я в этом методе не меняю поля класса.

А где тут класс?
Ответ написан
@Free_ze
Пишу комментарии в комментарии, а не в ответы
Неэкземплярные функции нельзя помечать const, потому что этот модификатор относится к состоянию, которого обычная функция не имеет.

FYI: "сахарные" лямбды могут иметь состояние (замыкание), но фактически, если лямбда захватывает переменную, то это уже не функция, а функтор, т.е. объект.

Да и, кстати
err при выходе из функции what в тот же момент умирает. По Стандарту срок жизни локальных переменных может продлеваться лишь до смерти ближайшей константной ссылки на них. Срок жизни других данных не гарантируется после покидания скоупа. Мне кажется, здесь имеет место еще и компиляторозависимое колдунство.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы