Здравствуйте, Федько Олег, Вы писали:
ФО>Здравствуйте, nap2k, Вы писали:
N>>В метод передается необязательный параметр типа string& (ссылка на std::string):
N>>
N>>int SetOutput(string &xmlstream = NULL);
N>>
N>>на null компилер ругается, что предать чтобы установить внутреннюю ссылку в NULL?
ФО>
ФО>int SetOutput(string &xmlstream = string());
ФО>int SetOutput(string &xmlstream = "");
ФО>//в зависимости от того, что надо
ФО>
Здравствуйте, nap2k, Вы писали:
N>В метод передается необязательный параметр типа string& (ссылка на std::string):
N>
N>int SetOutput(string &xmlstream = NULL);
N>
N>на null компилер ругается, что предать чтобы установить внутреннюю ссылку в NULL?
Компилер прав! Ссылка это синоним другого объекта в памяти (заметь синоним СУЩЕСТВУЮЩЕГО объекта)
а ты пытаешься передать ссылку ни на что! По самой природе ссылок так делать НИЗЯЯЯ!!
Если ты хочешь либо передавать ссылку на существующий объект либо ничего не передавать используй
указатель — он для этого и предназначен!
Здравствуйте, Lorenzo_LAMAS, Вы писали:
L_L>Здравствуйте, Федько Олег, Вы писали:
L_L>Оба твоих варианта неверны — инициализировать неконстантную ссылку временным объектом нельзя (такое позволяет только ВЦ).
L_L>Если бы ссылка была константна, то все ок. L_L>
ФО>только что проверил на ФО> Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 13 ФО> и Borland C++ 5.5 ФО>всё работает...
Ну что ж, радуйся. Только не удивляйся, если в более продвинутой версии компиляторов твоя программа не скомпилится. Ну и на всякий случай, смотри на такое:
Comeau C/C++ 4.3.1 (Mar 1 2003 20:09:34) for ONLINE_EVALUATION_BETA1
Copyright 1988-2003 Comeau Computing. All rights reserved.
MODE:strict errors C++
"ComeauTest.c", line 3: error: initial value of reference to non-const must be an
lvalue
void f(std::string & str = std::string());
^
1 error detected in the compilation of "ComeauTest.c".
In strict mode, with -tused, Compile failed
Hit the Back Button to review your code and compile options.
Comeau C/C++ 4.3.0.1 is now available! Only $50 for most platforms!!
Check our support for new C compiler backends for Windows.
Of course, the code must be complete enough to compile and link.
Здравствуйте, Dimkin, Вы писали:
D>Здравствуйте, nap2k, Вы писали:
N>>В метод передается необязательный параметр типа string& (ссылка на std::string):
N>>
N>>int SetOutput(string &xmlstream = NULL);
N>>
N>>на null компилер ругается, что предать чтобы установить внутреннюю ссылку в NULL?
D>Компилер прав! Ссылка это синоним другого объекта в памяти (заметь синоним СУЩЕСТВУЮЩЕГО объекта) D>а ты пытаешься передать ссылку ни на что! По самой природе ссылок так делать НИЗЯЯЯ!! D>Если ты хочешь либо передавать ссылку на существующий объект либо ничего не передавать используй D>указатель — он для этого и предназначен!
L_L>Comeau C/C++ 4.3.1 (Mar 1 2003 20:09:34) for ONLINE_EVALUATION_BETA1
L_L>Copyright 1988-2003 Comeau Computing. All rights reserved.
L_L>MODE:strict errors C++
L_L>"ComeauTest.c", line 3: error: initial value of reference to non-const must be an
L_L> lvalue
L_L> void f(std::string & str = std::string());
Ну тут ещё вопрос, что Comeau лучше Микрософта и Борланда, может это его, а не их бага.
Но чтобы узнать точно, надо смотреть Страуструпа...
Здравствуйте, nap2k, Вы писали:
N>В метод передается необязательный параметр типа string& (ссылка на std::string):
N>
N>int SetOutput(string &xmlstream = NULL);
N>
N>на null компилер ругается, что предать чтобы установить внутреннюю ссылку в NULL?
Используй указатель вместо ссылки. Если же очень охота, то можно типа такого написать (работает только на неприличных компиляторах, типа VC и считается очень дурным тоном)
ФО>Ну тут ещё вопрос, что Comeau лучше Микрософта и Борланда, может это его, а не их бага. ФО>Но чтобы узнать точно, надо смотреть Страуструпа...
Вот-вот, глава 5 кажется. А еще лучше стандарт, клауза 8, где про инициализацию ссылок — там и смотри. А что каксается компиляторов, так comeau это первый и пока единственный компилятор, такой близкий стандарту С++
Of course, the code must be complete enough to compile and link.
Здравствуйте, Федько Олег, Вы писали:
ФО>Ну тут ещё вопрос, что Comeau лучше Микрософта и Борланда, может это его, а не их бага. ФО>Но чтобы узнать точно, надо смотреть Страуструпа...
По стандарту неконстантная ссылка не может быть инициализирована временным объектом. Смотри 8.5.3
Здравствуйте, Alexey Shirshov, Вы писали:
AS>Здравствуйте, Lorenzo_LAMAS, Вы писали:
AS>>>А это что за птица?
L_L>>Может я фамилию и ПЕРЕВРАЛ, книжка такая была — вредные советы
AS>Не, такую не припомню.
AS>Используй указатель вместо ссылки. Если же очень охота, то можно типа такого написать (работает только на неприличных компиляторах, типа VC и считается очень дурным тоном) AS>
8.3.2/4
There shall be no references to references, no arrays of references, and no pointers to references.
The declaration of a reference shall contain an initializer (8.5.3) except when the declaration
contains an explicit extern specifier (7.1.1), is a class member (9.2) declaration within a class
declaration, or is the declaration of a parameter or a return type (8.3.5); see 3.1.
A reference shall be initialized to refer to a valid object or function.
[Note: in particular, a null reference cannot exist in a well-defined program,
because the only way to create such a reference would be to bind it to the “object” obtained
by dereferencing a null pointer, which causes undefined behavior. As described in 9.6, a
reference cannot be bound directly to a bitfield.]