Я написал следующую программу, где, если у класса есть нестатический элемент данных, тогда, когда объект такого типа передается как аргумент по значению, его нельзя использовать в контексте contexPR. После поиска проблемы в Интернете я наткнулся на эту ошибку GCC, где какой -то пользователь сказал что -то вроде того, когда класс пуст, тогда не применяется преобразование RValue, поэтому A в приведенном ниже примере работает, но не B . Но тогда другой пользователь говорит, что это не так. Демо < /p>
struct A {
static constexpr int value = 42;
};
struct B
{
static constexpr int value = 42;
int mem{};
};
constexpr int f(A a) { return A::value; }
constexpr int f(B b) { return B::value; }
int main() {
A a;
constexpr int aconst = f(a); //works in all compilers
B b;
constexpr int bconst = f(b); //fails in all compilers, why?
}
< /code>
gcc говорит: < /p>
: In function 'int main()':
:18:31: error: the value of 'b' is not usable in a constant expression
18 | constexpr int bconst = f(b); //fails in all compilers, why?
| ^
:17:7: note: 'b' was not declared 'constexpr'
17 | B b;
|
< /code>
По сути, я хочу знать, является ли утверждение о том, что преобразование RValue обходит в случае пустого дела класса или нет. И если это так, где/как точно в соответствии со стандартом.
Подробнее здесь: https://stackoverflow.com/questions/780 ... d-by-value
Является ли LVALU ⇐ C++
Программы на C++. Форум разработчиков
1751626001
Anonymous
Я написал следующую программу, где, если у класса есть нестатический элемент данных, тогда, когда объект такого типа передается как аргумент по значению, его нельзя использовать в контексте contexPR. После поиска проблемы в Интернете я наткнулся на эту ошибку GCC, где какой -то пользователь сказал что -то вроде того, когда класс пуст, тогда не применяется преобразование RValue, поэтому A в приведенном ниже примере работает, но не B . Но тогда другой пользователь говорит, что это не так. Демо < /p>
struct A {
static constexpr int value = 42;
};
struct B
{
static constexpr int value = 42;
int mem{};
};
constexpr int f(A a) { return A::value; }
constexpr int f(B b) { return B::value; }
int main() {
A a;
constexpr int aconst = f(a); //works in all compilers
B b;
constexpr int bconst = f(b); //fails in all compilers, why?
}
< /code>
gcc говорит: < /p>
: In function 'int main()':
:18:31: error: the value of 'b' is not usable in a constant expression
18 | constexpr int bconst = f(b); //fails in all compilers, why?
| ^
:17:7: note: 'b' was not declared 'constexpr'
17 | B b;
|
< /code>
По сути, я хочу знать, является ли утверждение о том, что преобразование RValue обходит в случае пустого дела класса или нет. И если это так, где/как точно в соответствии со стандартом.
Подробнее здесь: [url]https://stackoverflow.com/questions/78095754/is-lvalue-to-rvalue-conversion-not-applied-on-empty-class-object-passed-by-value[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия