необязательный параметр
От: nap2k Верблюд есть
Дата: 09.07.03 11:27
Оценка:
В метод передается необязательный параметр типа string& (ссылка на std::string):

int SetOutput(string &xmlstream = NULL);


на null компилер ругается, что предать чтобы установить внутреннюю ссылку в NULL?
... << RSDN@Home 1.1 beta 1 >>
Re: необязательный параметр
От: sercher Украина  
Дата: 09.07.03 11:31
Оценка: 4 (1)
Сыылочный параметр принимать значение по-умолчанию не может. Разве что на глобальную переменную.
Re: необязательный параметр
От: Федько Олег Россия  
Дата: 09.07.03 11:32
Оценка:
Здравствуйте, 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 = "");
//в зависимости от того, что надо
Re[2]: необязательный параметр
От: nap2k Верблюд есть
Дата: 09.07.03 11:39
Оценка: -1
Здравствуйте, Федько Олег, Вы писали:

ФО>Здравствуйте, 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 = "");
ФО>//в зависимости от того, что надо
ФО>


Так будет утечка памяти
... << RSDN@Home 1.1 beta 1 >>
Re[2]: необязательный параметр
От: Lorenzo_LAMAS  
Дата: 09.07.03 11:39
Оценка:
Здравствуйте, Федько Олег, Вы писали:

Оба твоих варианта неверны — инициализировать неконстантную ссылку временным объектом нельзя (такое позволяет только ВЦ).

Если бы ссылка была константна, то все ок.
void fun(const std::string & = std::string());
Of course, the code must be complete enough to compile and link.
Re[3]: необязательный параметр
От: Lorenzo_LAMAS  
Дата: 09.07.03 11:40
Оценка: +1
N>Так будет утечка памяти

Такое нормальный компилятор просто не скомпилит. А если скомпилил, то не бойся, никаких утечек не будет.
Of course, the code must be complete enough to compile and link.
Re: необязательный параметр
От: Dimkin Россия  
Дата: 09.07.03 11:44
Оценка:
Здравствуйте, nap2k, Вы писали:

N>В метод передается необязательный параметр типа string& (ссылка на std::string):


N>
N>int SetOutput(string &xmlstream = NULL);
N>


N>на null компилер ругается, что предать чтобы установить внутреннюю ссылку в NULL?


Компилер прав! Ссылка это синоним другого объекта в памяти (заметь синоним СУЩЕСТВУЮЩЕГО объекта)
а ты пытаешься передать ссылку ни на что! По самой природе ссылок так делать НИЗЯЯЯ!!
Если ты хочешь либо передавать ссылку на существующий объект либо ничего не передавать используй
указатель — он для этого и предназначен!

Удачи!
Re[3]: необязательный параметр
От: Федько Олег Россия  
Дата: 09.07.03 11:46
Оценка:
Здравствуйте, Lorenzo_LAMAS, Вы писали:

L_L>Здравствуйте, Федько Олег, Вы писали:


L_L>Оба твоих варианта неверны — инициализировать неконстантную ссылку временным объектом нельзя (такое позволяет только ВЦ).


L_L>Если бы ссылка была константна, то все ок.

L_L>
L_L>void fun(const std::string & = std::string());
L_L>



void fun(std::string& str = std::string());
void fun(std::string& str = std::string("")); <- вот так надо

только что проверил на
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 13
и Borland C++ 5.5
всё работает...
Re[4]: необязательный параметр
От: Lorenzo_LAMAS  
Дата: 09.07.03 11:49
Оценка:
ФО>только что проверил на
ФО> Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 13
ФО> и Borland C++ 5.5
ФО>всё работает...

Ну что ж, радуйся. Только не удивляйся, если в более продвинутой версии компиляторов твоя программа не скомпилится. Ну и на всякий случай, смотри на такое:
#include <string>

void f(std::string & str = std::string());


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.
Re[2]: необязательный параметр
От: nap2k Верблюд есть
Дата: 09.07.03 11:53
Оценка:
Здравствуйте, Dimkin, Вы писали:

D>Здравствуйте, nap2k, Вы писали:


N>>В метод передается необязательный параметр типа string& (ссылка на std::string):


N>>
N>>int SetOutput(string &xmlstream = NULL);
N>>


N>>на null компилер ругается, что предать чтобы установить внутреннюю ссылку в NULL?


D>Компилер прав! Ссылка это синоним другого объекта в памяти (заметь синоним СУЩЕСТВУЮЩЕГО объекта)

D>а ты пытаешься передать ссылку ни на что! По самой природе ссылок так делать НИЗЯЯЯ!!
D>Если ты хочешь либо передавать ссылку на существующий объект либо ничего не передавать используй
D>указатель — он для этого и предназначен!

спасибо так и сделал
... << RSDN@Home 1.1 beta 1 >>
Re[5]: необязательный параметр
От: Федько Олег Россия  
Дата: 09.07.03 12:00
Оценка:
Здравствуйте, Lorenzo_LAMAS, Вы писали:

L_L>

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 лучше Микрософта и Борланда, может это его, а не их бага.
Но чтобы узнать точно, надо смотреть Страуструпа...

Удалено избыточное цитирование. -- ПК.
Re: необязательный параметр
От: Alexey Shirshov Россия http://wise-orm.com
Дата: 09.07.03 12:04
Оценка:
Здравствуйте, nap2k, Вы писали:

N>В метод передается необязательный параметр типа string& (ссылка на std::string):


N>
N>int SetOutput(string &xmlstream = NULL);
N>


N>на null компилер ругается, что предать чтобы установить внутреннюю ссылку в NULL?


Используй указатель вместо ссылки. Если же очень охота, то можно типа такого написать (работает только на неприличных компиляторах, типа VC и считается очень дурным тоном)
int SetOutput(string &xmlstream = *(string*)0);
Re[6]: необязательный параметр
От: Lorenzo_LAMAS  
Дата: 09.07.03 12:11
Оценка:
ФО>Ну тут ещё вопрос, что Comeau лучше Микрософта и Борланда, может это его, а не их бага.
ФО>Но чтобы узнать точно, надо смотреть Страуструпа...

Вот-вот, глава 5 кажется. А еще лучше стандарт, клауза 8, где про инициализацию ссылок — там и смотри. А что каксается компиляторов, так comeau это первый и пока единственный компилятор, такой близкий стандарту С++
Of course, the code must be complete enough to compile and link.
Re[2]: необязательный параметр
От: Lorenzo_LAMAS  
Дата: 09.07.03 12:13
Оценка:
AS>
AS>int SetOutput(string &xmlstream = *(string*)0);
AS>


Это из Остермана что ль?
Of course, the code must be complete enough to compile and link.
Re[3]: необязательный параметр
От: Alexey Shirshov Россия http://wise-orm.com
Дата: 09.07.03 12:15
Оценка:
Здравствуйте, Lorenzo_LAMAS, Вы писали:

[]

L_L>Это из Остермана что ль?


А это что за птица?
Re[4]: необязательный параметр
От: Lorenzo_LAMAS  
Дата: 09.07.03 12:16
Оценка:
AS>А это что за птица?

Может я фамилию и ПЕРЕВРАЛ, книжка такая была — вредные советы
Of course, the code must be complete enough to compile and link.
Re[5]: необязательный параметр
От: Alexey Shirshov Россия http://wise-orm.com
Дата: 09.07.03 12:19
Оценка:
Здравствуйте, Lorenzo_LAMAS, Вы писали:

AS>>А это что за птица?


L_L>Может я фамилию и ПЕРЕВРАЛ, книжка такая была — вредные советы


Не, такую не припомню.
Re[6]: необязательный параметр
От: Bell Россия  
Дата: 09.07.03 12:27
Оценка:
Здравствуйте, Федько Олег, Вы писали:

ФО>Ну тут ещё вопрос, что Comeau лучше Микрософта и Борланда, может это его, а не их бага.

ФО>Но чтобы узнать точно, надо смотреть Страуструпа...

По стандарту неконстантная ссылка не может быть инициализирована временным объектом. Смотри 8.5.3
Любите книгу — источник знаний (с) М.Горький
Re[6]: необязательный параметр
От: Дмитрий Наумов  
Дата: 09.07.03 12:28
Оценка:
Здравствуйте, Alexey Shirshov, Вы писали:

AS>Здравствуйте, Lorenzo_LAMAS, Вы писали:


AS>>>А это что за птица?


L_L>>Может я фамилию и ПЕРЕВРАЛ, книжка такая была — вредные советы


AS>Не, такую не припомню.


Остер вроде. А совет
int SetOutput(string &xmlstream = *(string*)0);


точно из той книжки
Re[6]: необязательный параметр
От: Lorenzo_LAMAS  
Дата: 09.07.03 12:29
Оценка:
AS>Не, такую не припомню.

Может Остер? (прям как в городке — "Будкер-Шмудкер-Зильберман-Зильберович")
Там типа советы, например, как соседям нагадить и т.д.

А если серьезно, то твой совет с нулевой ссылкой уж больно "хардкорен"
Of course, the code must be complete enough to compile and link.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.