Я ищу библиотеку С++ и вижу класс istream, меня смущает подрядчик с символом адреса. что означает конструктор с символом адреса?
один из конструкторов istream.
protected: iostream& (iostream&& x);
Я нашел его на сайте cplusplus.com,
ссылка: iostream
Я определил класс клиента с аналогичным конструктором, который имеет символ &:
//Test.cpp
#include <iostream>/*cout,cin*/
#include <typeinfo>/*typeid(),name()*/
using namespace std;
struct MyTest{
MyTest&(double b){}
};
int main(int argc,char* argv[]){
MyTest mt2(2.1);
cout << typeid(mt2).name() << endl;
return 0;
}
Я использую следующую команду для его компиляции:
g++ Test.cpp -o Test -std=c++11
однако я получаю сообщения об ошибках компиляции:
Test.cpp:7:11: error: expected unqualified-id before ‘float’
MyTest&(float b){}
^
Test.cpp:7:11: error: expected ‘)’ before ‘float’
Test.cpp:7:10: error: expected ‘;’ at end of member declaration
MyTest&(float b){}
^
Test.cpp:7:17: error: expected ‘;’ at end of member declaration
MyTest&(float b){}
^
Test.cpp:7:18: error: expected unqualified-id before ‘)’ token
MyTest&(float b){}
^
Test.cpp: In function ‘int main(int, char**)’:
Test.cpp:12:16: error: no matching function for call to ‘MyTest::MyTest(double)’
MyTest mt2(2.1);
Я запутался, класс istream библиотеки С++ в порядке. почему мой пользовательский конструктор класса не удался? что мне не хватает?
Несмотря на название и рейтинг в Google, cplusplus.com не является авторитетным или даже хорошим источником. В нем много ошибок.
C++ имеет контекстно-зависимую грамматику; то, о чем вы спрашиваете, это не адрес оператора, а скорее модификатор ссылочного типа.
Я не знаю, почему отрицательные голоса. Это вполне резонный вопрос о том, что было найдено в документации; и OP пытался воспроизвести синтаксис, чтобы понять, что он будет делать, но потерпел неудачу. Это неспособность сообщества исправить google ratings/cplusplus.com; а не у ОП, который его читал; и просить понять ошибку ЭТО ХОРОШО.





Информация на cplusplus.com... иногда ненадежна. (Обсуждение этого см. в Что не так с cplusplus.com?.) В CPPСсылка вы можете видеть, что конструктор перемещения — это, как вы знаете, обычный конструктор перемещения.
Это ошибка в http://www.cplusplus.com/reference/istream/iostream/iostream/.
Если вы посмотрите на https://en.cppreference.com/w/cpp/io/basic_iostream/basic_iostream, вы найдете
protected: basic_iostream( basic_iostream&& other );
учитывая, что на сайте cplusplus.com указано: copy (2) iostream& (const iostream&) = delete; move (3) protected: iostream& (iostream&& x); Я думаю, вам нужно уточнить ту часть, которую вы считаете неправильной
Где вы нашли
iostream& (iostream&& x);? Не могли бы вы дать ссылку на точное место в репо?