C ++ & ldquo; Ожидаемый спецификатор типа & rdquo; [Дубликат]

Функции mysql_:

  1. устарели - они больше не поддерживаются
  2. не позволяют легко перемещаться в другой бэкэнд базы данных
  3. не поддерживают подготовленные инструкции, поэтому
  4. поощряет программистов использовать конкатенацию для создания запросов, что приводит к уязвимости SQL-инъекций
19
задан templatetypedef 2 May 2013 в 04:45
поделиться

1 ответ

Я не на 100% уверен в этом, но это может быть для предотвращения неоднозначности синтаксиса. Например, рассмотрим следующий класс:

class BadTimes {
    struct Overloaded;
    int Overloaded;            // Legal, but a very strange idea.

    int confusing(Overloaded); // <-- This line
};

Что означает обозначенная линия? Как написано, это объявление функции-члена с именем confusing, которая принимает в качестве параметра объект типа Overloaded (имя которого не указано в объявлении функции) и возвращает int. Если C ++ 11 разрешал инициализаторам использовать круглые скобки, это было бы неоднозначно, потому что это также может быть определение члена типа int с именем confusing, который инициализируется значением элемента данных Overloaded , (Это связано с текущей проблемой с Most Vexing Parse .)

При использовании фигурных скобок эта неоднозначность удаляется:

class BadTimes {
    struct Overloaded;
    int Overloaded;            // Legal, but a very strange idea.

    int confusing{Overloaded}; // <-- This line
};

Теперь , ясно, что confusing на самом деле является int, инициализированным значением Overloaded, потому что нет возможности прочитать его как объявление функции.

Надеюсь, что это поможет!

30
ответ дан templatetypedef 25 August 2018 в 16:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: