Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Value categories. Является ли выражение xvalue? - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Рекурсия для поиска вещественного корня функции f(x) на отрезке [a, b] http://www.cyberforum.ru/cpp-beginners/thread1506899.html
Написать рекурсивную функцию нахождения вещественного корня функции f(x) на отрезке . Указание.Пусть функция f(x) вещественной переменной x непрерывна на отрезке и f(a)*f(b)<=0.При перечисленных...
C++ Описать классы "Кубик", "Угол" и "Шар" Задание на фотографии, заранее спасибо. Правила форума 5.18: Запрещено размещать задания и решения в виде картинок и других файлов с их текстом. Перепечатывайте задание текстом вторым... http://www.cyberforum.ru/cpp-beginners/thread1506891.html
Открыть jar файлы по щелчку C++
Случилась беда, jar файлы не открываются по щелчку. Пролистал много форумов, ничего мне не помогло. Запускать через cmd или bat надоело, пришлось придумать новый способ. Я скомпилировал exe программу...
Можно ли написать более оптимальный или простой код, используя цикл for? C++
собственно сабж. #include <iostream> using namespace std; int main() { int sum, count, ost; for (count = 0; count < 99; count++)
C++ При переводе string в long double теряется дробная часть http://www.cyberforum.ru/cpp-beginners/thread1506827.html
Помогите с программой. При переводе string в long double дробная часть становится равной нулю(не зависит от длины числа). #include <iostream> #include <iomanip> #include <conio.h> #include...
C++ Merge и сортировка Почему merge не сортирует массив в алфавитном порядке? c: подробнее

Показать сообщение отдельно
Vlad1slav
21 / 21 / 5
Регистрация: 16.09.2009
Сообщений: 111

Value categories. Является ли выражение xvalue? - C++

29.07.2015, 23:13. Просмотров 540. Ответов 3
Метки (Все метки)

Знакомлюсь с xvalue. Прочитал описание на cppreference.
Согласно описанию,
a non-static class member access expression, in which the object expression is an xvalue
выражение доступа к нестатическому члену класса является xvalue, если сам объект является xvalue.
xvalue объект проще всего получить через std::move.
Определение категорий выражений стырено со stackoverflow.
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// prvalue
template<typename T>
struct ValueCategory
  {
  static const char* const value;// = "prvalue";
  };
template<typename T>
const char* const ValueCategory<T>::value = "prvalue";
 
// lvalue
template<typename T>
struct ValueCategory<T&>
  {
  static const char* const value;// = "lvalue";
  };
template<typename T>
const char* const ValueCategory<T&>::value = "lvalue";
 
// xvalue
template<typename T>
struct ValueCategory<T&&>
  {
  static const char* const value;// = "xvalue";
  };
template<typename T>
const char* const ValueCategory<T&&>::value = "xvalue";

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#define DetermineValueCategory(text, expr) \
  std::cout << ValueCategory<decltype((expr))>::value << " : " << text << std::endl;
 
int main()
{
    struct TestXClass
    {
    TestXClass(int i_value) : m_value(i_value) {}
    int m_value;
    };
  DetermineValueCategory("std::move", std::move(TestXClass(10)));
  DetermineValueCategory(
    "a non-static class member access expression, in which the object expression is an xvalue", 
    std::move(TestXClass(10)).m_value
  );
}
Этот код утверждает что в первом случае получается xvalue expression(что собственно логично),
а во втором случае - prvalue, что не соответствует описанию на cppreference.
Это я неправильно перевёл/понял выражение на cppreference, или проблема в чём-то другом?

Добавлено через 44 минуты
Оказывается VS2013 работает не корректно с xvalue, а в gcc всё работает как положено.
gcc - http://rextester.com/FIQ51611
vc++ - http://rextester.com/EMVE94367
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru