Что означает символ адреса & в конструкторе? - PullRequest
3 голосов
/ 15 апреля 2019

Я смотрю библиотеку c ++ и вижу класс istream, меня смущает подрядчик с символом адреса.что означает конструктор с символом адреса?

один из конструкторов istream:

protected: iostream& (iostream&& x);

Я нашел его на сайте cplusplus.com,

c++11contructors

ссылка: 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);

Я запутался, класс C ++ библиотеки istream в порядке.почему мой пользовательский конструктор класса потерпел неудачу?что мне не хватает?

Ответы [ 2 ]

2 голосов
/ 15 апреля 2019

Информация на cplusplus.com ... иногда не надежна. (См. Что не так с cplusplus.com? для обсуждения этого.) На CPPReference вы можете видеть, что конструктор перемещения, вы знаете, просто обычный конструктор перемещения.

0 голосов
/ 15 апреля 2019

Это ошибка в 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);

...