Форум программистов, компьютерный форум CyberForum.ru

Неоднозначность декларации - C++

Восстановить пароль Регистрация
 
Fulcrum_013
 Аватар для Fulcrum_013
393 / 566 / 60
Регистрация: 14.12.2014
Сообщений: 4,769
Завершенные тесты: 2
19.09.2016, 09:24     Неоднозначность декларации #1
Итак уважаемые знатоки:
C++
1
2
3
4
5
6
class Foo{
public:
            Foo(){};
};
 
Foo Bar();
Внимание вопрос: как уважающий себя компилятор поступит в данном случае: посчитает Bar() инициализацией объекта или декларацией функции?
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.09.2016, 09:24     Неоднозначность декларации
Посмотрите здесь:

C++ неоднозначность, explicit
Декларации C++
C++ нет декларации to_string
компилятор находит неоднозначность при вызове round(i) C++
C++ Неоднозначность и multiple inheritance
C++ Неоднозначность при наследовании
Неоднозначность переменной count C++
C++ Виртуальная неоднозначность

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DrOffset
6442 / 3816 / 885
Регистрация: 30.01.2014
Сообщений: 6,610
19.09.2016, 09:32     Неоднозначность декларации #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
посчитает Bar() инициализацией объекта или декларацией функции?
Будет декларация функции.
См. здесь: Most Vexing Parse

Добавлено через 5 минут
8.2/1
The ambiguity arising from the similarity between a function-style cast and a declaration mentioned in 6.8
can also occur in the context of a declaration. In that context, the choice is between a function declaration
with a redundant set of parentheses around a parameter name and an object declaration with a function-style
cast as the initializer. Just as for the ambiguities mentioned in 6.8, the resolution is to consider any construct
that could possibly be a declaration a declaration
. [ Note: A declaration can be explicitly disambiguated by
a nonfunction-style cast, by an = to indicate initialization or by removing the redundant parentheses around
the parameter name. —end note ] [ Example:
C++
1
2
3
4
5
6
7
8
9
struct S {
    S(int);
};
void foo(double a) {
    S w(int(a)); // function declaration
    S x(int()); // function declaration
    S y((int)a); // object declaration
    S z = int(a); // object declaration
}
—end example ]
Yandex
Объявления
19.09.2016, 09:32     Неоднозначность декларации
Ответ Создать тему
Опции темы

Текущее время: 17:44. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru