class A
{
public:
typedef std::shared_ptr<A> Ptr;
};
void f(A::Ptr&)
{
}
int main()
{
f(A::Ptr(new A));
}
Почему возникает предупреждение
warning C4239: nonstandard extension used: 'argument': conversion from 'std::shared_ptr' to 'A::Ptr &'
А если сделать так то предупреждение не возникает:
int main()
{
A::Ptr a(new A);
f(a);
}
Как такое использование может привести к ошибке?
Функция описана как получающая неконстантную ссылку, а передаете вы в нее временное значение (грубо говоря, rvalue). VC++ разрешает такие действия, но именно как нестандартное расширение.
Во втором случае вы передаете ссылку на переменную, т.е. ссылку на lvalue.
Не думаю, что в функции вы как-то меняете входную ссылку - иначе какой смысл передавать в нее временный объект? - так что можете написать
void f(const A::Ptr&)
Это позволит не прибегать к нестандартным расширениям.
В вопросе Поиск самой длинной строки я увидел слово компаратор, но поскольку я мало понимаю в программировании, то я не знаю что это может...
Всем привет! Понимаю, что сам вопрос звучит довольно глупо, но столкнулся с такой задачейНужно сделать Юнит тесты для класса являющимся синглтоном,...
Нужно отослать данные Usb девайсу в нужный EndpointРаботаю с устройством как с файлом, WriteFile ReadFile