Здравствуйте, Глеб Алексеев, Вы писали:
ГА>Здравствуйте, <Аноним>, Вы писали:
А>>c_str — не лишнее, мне как раз нужно понять, почему в данном случае можно так запросто обращаться к функции-члену временного объекта. ГА>Потому что временный объект живет до окончания вычисления всего выражения, и функция-член — константная.
Здравствуйте, Глеб Алексеев, Вы писали:
ГА>Здравствуйте, <Аноним>, Вы писали:
А>>c_str — не лишнее, мне как раз нужно понять, почему в данном случае можно так запросто обращаться к функции-члену временного объекта. ГА>Потому что временный объект живет до окончания вычисления всего выражения, и функция-член — константная.
Некорректен, у функции GetStr не указан тип возвращаемого значения (синтаксическая ошибка), в main вызывается необъявленная функция GetStr() в глобальном пространстве имен. Если поправить на
Во-первых, у A::GetStr отсутствует возвращаемое значение, а сишное правило "int по-умолчанию" в С++ не действует.
Во-вторых, не наблюдается "обычной" функции GetStr, к которой обращается main.
Любите книгу — источник знаний (с) М.Горький
Re[2]: Корректен ли такой код и почему?
От:
Аноним
Дата:
04.10.05 09:35
Оценка:
Прошу прошения за неаккуратность, имелось в виду
А>>
Здравствуйте, <Аноним>, Вы писали:
А>c_str — не лишнее, мне как раз нужно понять, почему в данном случае можно так запросто обращаться к функции-члену временного объекта.
Потому что временный объект живет до окончания вычисления всего выражения, и функция-член — константная.
А>c_str — не лишнее, мне как раз нужно понять, почему в данном случае можно так запросто обращаться к функции-члену временного объекта.
Стандарт разрешает для временного объекта вызывать как константные так и не константные функции-члены — см 3.10 п.2 и 47 сноска.
Re[4]: Корректен ли такой код и почему?
От:
Аноним
Дата:
04.10.05 09:45
Оценка:
Здравствуйте, Bell, Вы писали:
B>Здравствуйте, Аноним, Вы писали:
А>>c_str — не лишнее, мне как раз нужно понять, почему в данном случае можно так запросто обращаться к функции-члену временного объекта.
B>Потому что время жизни временного объекта это позволяет.
B>ЗЫ B>Временный объект в данном случае разрушается после вычисления всего выражения.
А в таком случае?
void f(const char*) {}
int main()
{
f(A().GetStr().c_str());
}
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, Bell, Вы писали:
B>>Здравствуйте, Аноним, Вы писали:
А>>>c_str — не лишнее, мне как раз нужно понять, почему в данном случае можно так запросто обращаться к функции-члену временного объекта.
B>>Потому что время жизни временного объекта это позволяет.
B>>ЗЫ B>>Временный объект в данном случае разрушается после вычисления всего выражения.
А>А в таком случае? А>
Здравствуйте, Phoenickx, Вы писали:
P>Здравствуйте, Глеб Алексеев, Вы писали:
ГА>>Некорректен, у функции GetStr не указан тип возвращаемого значения (синтаксическая ошибка)
P>А разве в таком случае не будет принят int по умолчанию?
Во-первых, нет.
Во-вторых, разве функция, возвращающая строку в качестве целого числа, — корректна?