Описание тега ref-qualifier

Способ указать категорию значения указателя *this в функции-члене.
0 ответов

Условный условный реф

У меня есть CRTP-подобная иерархия, где производные классы могут быть реализованы немного по-разному, и для одного класса некоторые методы могут вызывать ссылки на rvalue, но для другого класса это было бы нежелательно: template <class TDerived&g…
20 июн '18 в 01:21
1 ответ

Почему void B::f() const & выбирается, когда B:: f вызывается временным объектом B?

#include <iostream> struct A { void f() const & { std::cout << "A::f()&" << std::endl; } void f() const && { std::cout << "A::f()&&" << std::endl; } }; struct B { void f() const & { std::cout…
2 ответа

Ошибка создания шаблона для ref-квалифицированных членов

#include <iostream> using std::cout; template<typename T> class A{ public: template<typename U> void f(U const&) & ; template<typename U> void f(U const&) && ; }; template<typename T> template<typ…
08 июл '16 в 13:22
0 ответов

Могу ли я сделать ссылку легко для большего количества ресурсов?

Я разрабатываю игру. Я хотел бы, чтобы изображение отображалось на экране. Он должен заполнить экран на 90% по ширине (около 90%). Я не хочу, чтобы система изменяла размеры моих изображений (мне не нравится качество, которое это дает). Я хотел бы ра…
11 дек '14 в 10:29
0 ответов

Ссылка как последний символ в объявлении функции C++?

Глядя на Boost:: Необязательный необязательный заголовок шаблона класса, я сталкиваюсь с этим: T const& operator*() const& T& operator*() &; T&& operator*() &&; Для жизни я не могу найти этот синтаксис где-либо еще (с…
2 ответа

Есть ли реальный вариант использования ссылочных квалификаторов функций?

Недавно я узнал о function's reference qualifiersнапример, struct foo { void bar() {} void bar1() & {} void bar2() && {} }; Где мне может понадобиться эта функция, есть ли реальный вариант использования этой функции языка?
19 янв '15 в 14:01
0 ответов

Идеальная переадресация и реф-квалификаторы для функций-членов

В C++11 появилась возможность переопределять функции-члены, а также совершенную пересылку. Но можем ли мы смешать их вместе? Рассмотрим этот (рабочий) пример: struct bar{ std::string str; void do_stuff() & { /* version 1 */ } void do_stuff() &am…
24 май '17 в 07:18
1 ответ

Целесообразно ли перегружать операторы с помощью ref-квалификатора, чтобы предотвратить временные задержки?

Мне просто пришло в голову, что operator+ & Co может работать на this для значений; т.е. дано класс Cможно сделать это: class C { // ... C operator-( const C& rhs ) const & { C result = *this; result -= rhs; return result; } C&& oper…
03 сен '15 в 17:02
6 ответов

Как повысить эффективность "str1 + str2 + str3 + ..." в C++14?

std::string Concatenate(const std::string& s1, const std::string& s2, const std::string& s3, const std::string& s4, const std::string& s5) { return s1 + s2 + s3 + s4 + s5; } По умолчанию, return s1 + s2 + s3 + s4 + s5; может быть…
1 ответ

ref-квалификаторы для оператора присваивания стандартных типов библиотек

Мне было интересно, есть ли причина, по которой оператор присваивания стандартных типов не является lvalue ref-qualified? Ни один из них не является. Из-за этого мы можем написать такие вещи, как это: std::string{} = "42"; std::string s = "hello " +…
1 ответ

Пересылка cv-ref-qualifier для функций-членов

Если нет других перегрузок (скажем, f(T &) или же f(volatile T &&)) (функции) шаблона функции template< typename T > f(T &&);, затем T && это так называемая экспедиционная ссылка, и T либо U, или же U & для неко…
30 сен '15 в 06:39
1 ответ

Могу ли я сделать ссылку на всю папку ресурсов?

Я хотел бы поддерживать много разных типов экранов с помощью доступных ресурсов. Но я могу использовать некоторые рисунки с одинаковым размером на нескольких экранах. Например: -xxhdpi-normal и -mdpi-xlarge могут использовать нарисованное изображени…
10 дек '14 в 19:46
1 ответ

Является ли хорошей практикой возвращать ссылку на r-значение из метода, уточненного по r-значению?

Как я вижу, общее правило - вообще не возвращать ссылки на r-значения из функций (за исключением редких особых случаев). Но как насчет методов класса? В стандартной библиотеке C++ есть пример возврата ссылки на r-значение из ref-квалифицированного м…
2 ответа

Конечный тип возврата, declval и ссылочные квалификаторы: могут ли они работать вместе?

Рассмотрим следующий пример: #include <utility> struct A { void f() {} }; struct B { void f() & {} }; struct C { void f() && {} }; template<typename T> auto f() -> decltype(std::declval<T>().f()) {} int main() { f&lt…
06 ноя '16 в 21:47
1 ответ

r-значение ref-определителей для контейнеров STL

Почему элемент обращается к функциям-членам контейнеров STL, например std::array::operator[] или же std::vector::operator[] у вас нет перегрузок refvalififier rvalue? Конечно я могу сделать std::move(generate_vector()[10]), но мне любопытно, рассмат…
22 фев '18 в 09:31
1 ответ

Вызов перегруженной функцией ref-qualifiers функции неоднозначен

Я обнаружил странное поведение при компиляции моего кода с помощью G ++ (gcc 4.8.1 и MinGW 4.8.2 с -std=gnu++1y флаг). В духе SSCCE я выделил следующий фрагмент: struct C { template< typename X > auto f(X &&) const & { ; } template…
23 апр '14 в 15:34
1 ответ

Как убрать дублирование кода между похожими функциями-членами с квалификацией ref?

Аналогично Как удалить дублирование кода между похожими константными и неконстантными функциями-членами? Я хочу удалить дублирование кода между почти одинаковыми функциями-членами, за исключением квалификаторов ref. Допустим, у меня есть класс, кото…
20 июн '17 в 05:12
1 ответ

ref-квалифицированные функции-члены как аргументы шаблона?

Это хорошо компилируется в Clang 3.3: template <typename T> struct M; template <typename R, typename C, typename... A> struct M <R (C::*)(A...)> { }; template <typename R, typename C, typename... A> struct M <R (C::*)(A...…
2 ответа

Почему аргумент шаблона не может быть выведен в этом контексте?

Может ли кто-нибудь объяснить, почему компиляторы (g ++, visual C++) не могут вывести аргумент шаблона в этом случае? struct MyClass { void Foo(int x)& {} void Foo(int x)&& {} }; template<typename T> void CallFoo(void(T::*func)(int…
1 ответ

Явные ref-квалифицированные шаблоны операторов преобразования в действии

Учитывая следующие операторы преобразования struct A { template<typename T> explicit operator T&& () &&; template<typename T> explicit operator T& () &; template<typename T> explicit operator const T& ()…