Самая неприятная двусмысленность синтаксического анализа в C 11. как показано в следующем коде фрагмент:
#include
#include
class Timer
{
public:
Timer() {}
};
int main()
{
auto dv = Timer(); // Ambiguity: Object or function call?
int time_keeper(Timer()); // Ambiguity: Pointer or call?
return 0;
}
В первом выражении ключевое слово auto подразумевает, что тип dv выводится из инициализатора справа от знака равенства (=). Инициализатор — это вызов конструктора Timer без аргументов, который возвращает объект Timer. Следовательно, dv является объектом типа Timer.
Понимание второго выражения (int time_keeper(Timer()))
Во втором выражении неоднозначность возникает, поскольку компилятор не может определить, является ли Timer() вызовом функции или объектом типа Timer, передаваемым по ссылке.
Если Timer() вызов функции, затем int time_keeper(Timer()) объявляет функцию с именем time_keeper, которая принимает объект Timer в качестве входных данных и возвращает int.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3