Является ли LVALUC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Является ли LVALU

Сообщение 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 обходит в случае пустого дела класса или нет. И если это так, где/как точно в соответствии со стандартом.


Подробнее здесь: https://stackoverflow.com/questions/780 ... d-by-value
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»