#c 11
#c 11
Вопрос:
Я бы попросил кого-нибудь немного объяснить мне, почему перечисление может быть передано только по правильной ссылке, а не как простая ссылка?
namespace n1
{
enum e1
{
f = 1,
f1
};
}
void f(n1::e1amp;amp; e)
{
std::cout<<static_cast<int>(e);
}
int main()
{
f(n1::e1::f1);
return 0;
}
Комментарии:
1. вы должны либо использовать класс enum вместо шаблона namespace / enum, ЛИБО игнорировать приведение и обмануть lil, используя этот шаблон, чтобы вам не приходилось его приводить.
Ответ №1:
enum
s являются константами, поэтому вы не можете воспринимать это как n1::e1amp;
, но как const n1::e1amp;
:
void f(const n1::e1amp; e) {
std::cout<<static_cast<int>(e);
}
Комментарии:
1. Согласен с ответом, но я бы рекомендовал передавать
enum
(или любой другой небольшой объект, напримерstd::span
,std::string_view
и т.д.) по значению.2. @Quarra, когда это
const
, безусловно.
Ответ №2:
Перечисления являются целыми константами :
- параметр enum функции должен быть постоянным
Примечание: вам не нужно приводить перечисление, чтобы напечатать его значение
void f(const n1::e1amp; e) {
std::cout<< e ;
}
Комментарии:
1. Не могли бы вы уточнить, что означает «Rem»? Это «напоминание», или «запомнить», или что-то еще?