LINUX.ORG.RU

Передача объектов QT по ссылке


0

1

Допустим есть функция f(QString &str){};

и два вариантов вызова:

[code=cpp]
QString str(«Any string»);
f(str);
[/code]

[code=cpp]
f(QString(«Any string»));
[/code]

по какой причине второй вариант не компилится? ошибка «no matching function for call to f(QString)»

пока нашел один способ без объявления переменной:
f(QString *str){};
и вызывать f(&QString(«Any string»));
но тогда вываливается ворнинг «taking address of temporary»


Ответ на: комментарий от Love5an

> Семантика указателя - адрес объекта в памяти.

В первом приближении да. Но почти всегда подразумевается возможность полимофного поведения. В отличае от обращения по ссылке - всегда подразумевается статическое поведение

namezys ★★★★
()
Ответ на: комментарий от namezys

При первом параметре = NULL, она выделяет ровно столько страниц, во сколько умещается второй параметр.
В данном случае - ровно одну.

Love5an
()
Ответ на: комментарий от Love5an

В общем не важно. Чел явно не шарит. Тем более работа с памятью - это уже уровень С и глубокого понимания принципов «защищенного режима» процессора

namezys ★★★★
()
Ответ на: комментарий от namezys

Да. Юзал он скорей всего new, а он использует стандартный способ выделения. А куча может мегабайтами откусываться у системы

namezys ★★★★
()
Ответ на: комментарий от pozitiffcat

как минимум чтобы можно было по ссылке переменную передавать, которая уже объявлена. точно лол

cva
() автор топика
Ответ на: комментарий от Love5an

Вы тролль, но это ваше дело. «Any string» - таки константная строка. По поводу T() - далеко не факт.

Booster ★★
()

T() - rvalue, значение. По стандарту ссылку можно передавать либо на lvalue либо на const rvalue.

class T
{
   int i;
public:
   void foo(T& obj)
   {
      obj.i = 0;
   };

   void main()
   {
      T testobj;
      testobj.foo(T());
   }
};

Это не по стандарту, хотя логика в этом есть. Что такое rvalue, lvalue - http://www.rsdn.ru/article/cpp/lvalue.xml

Проверить на соответствие стандарту можно здесь - http://www.comeaucomputing.com/tryitout/ И прочитать почему это не стандарт, тоже. Думаю вопрос исчерпан.

Booster ★★
()
Ответ на: комментарий от namezys

При чём здесь шаблоны? Они как-бы побоку в данной теме.

Booster ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.