crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

2 страниц V  < 1 2  
Ответить в данную темуНачать новую тему
> Вопрос по с++, Помогите понять суть
DEADHUNT
  опции профиля:
сообщение 14.7.2010, 18:27
Сообщение #11


Активный участник
***

Группа: Участник
Сообщений: 430
Регистрация: 15.4.2009
Пользователь №: 686

Спасибо сказали: 26 раз(а)




Репутация:   2  


вот в чём дело:
7
Another ambiguity arises in a parameter-declaration-clause of a function declaration, or in a type-id that
is the operand of a sizeof or typeid operator, when a type-name is nested in parentheses. In this case,
the choice is between the declaration of a parameter of type pointer to function and the declaration of a
parameter with redundant parentheses around the declarator-id. The resolution is to consider the type-name
as a simple-type-specifier rather than a declarator-id. [ Example:
class C { };
void f(int(C)) { } // void f(int(*fp)(C c)) { }
                         // not: void f(int C);

int g(C);
void foo() {
f(1); // error: cannot convert 1 to function pointer
f(g); // OK
}
---]

A r1(std::string(v[1])); // A r1(std::string *v)
A r2(std::string(e)); // A r2(std::string e)



Цитата(igor_bogomolov @ 14.7.2010, 14:14) *
Еще подсказали. Достаточно выражение в r1 и r2 заключить еще в одни скобки и неоднозначность пропадет.

этим исключается возможность выбора simple type-specifier.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Влад
  опции профиля:
сообщение 16.7.2010, 11:45
Сообщение #12


Участник
**

Группа: Участник
Сообщений: 146
Регистрация: 20.3.2009
Из: Санкт-Петербург
Пользователь №: 627

Спасибо сказали: 46 раз(а)




Репутация:   8  


Эта особенность синтаксиса описана у Скотта Мейерса в его "Эффективное использование STL" - Совет 6: Остерегайтесь странностей лексического разбора C++.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

2 страниц V  < 1 2
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 19.2.2020, 8:31