Для обеспечения стабильности и совместимости двух
совместимости с подпорной C99
Предопределенные макросы
стандартного языка C99 добавляют некоторые предопределенные макросы, C ++ 11 также добавляет поддержку для этих макросов
- __func__ предопределенный идентификатор
Если имя функции функции возвращается, С ++ 11, стандарт даже позволяет его использование в структуре класса или
- оператор _Pragma
C стандарт / C ++, директива # Прагма является предварительная обработка, часть информации , чтобы передать вне стандартных компиляторов языка, например , #pragma раз указывает на то, что файл заголовка должен быть составлен только один раз
определены в стандарте C ++ 11 функции #pragma предварительной обработки с тем же оператором _Pragma, например , _Pragma ( «один раз»);
- Определения макросов и параметров __VA_ARGS__ переменной длины
В стандарте C99, переменная длина параметры макро определения относится к последнему параметру списка параметров Макроопределение заменено многоточию эллипсов, а заданное __VA_ARGS__ достичь некоторых предопределенных макросов в макро может быть определена , чтобы представить строку
#define PR (...) Е (__ VA_ARGS__ )
- Подключение ширины строки
Стандарт C ++, преобразование узкой строки (символов) в строку широких (wchar_t) поведение не определено
в стандарте C ++ 11, когда узкой и широкой строки Строка соединения, строка будет узкая преобразуется в строку широких, а затем соединяется с широкой строки
Макро __cpluscplus__
C и C ++ заголовочных файлов сочетание обычного использования
. 1 #ifidef в __cplusplus 2 экстерном " C " { . 3 #endif . 4 // некоторый код . 5 #ifdef в __cplusplus . 6 } . 7 #endif
В C ++ 11 __cplusplus определяется как 201103L быть использован для обнаружения ли поддержка C ++ 11
#if в __cplusplus <201103L #error "Если РЕАЛИЗАЦИЯ использование C ++. 11" // предварительно скомпилированные инструкции #endif
Статическое утверждение
утверждениятомчто возвращаемое значение всегда необходимо действительно дискриминантных подать заявление об исключении не должно быть логически разработанычтобы заставить программу при возникновении исключения, выходчтобы избежать программ в логику путаница
Assert.h файлы заголовков определяют макросы, пострадавших NDEBUG Если предварительно процедура в борьбе с этим заголовочного файла NDEBUG был определен, утверждают макрос определяется как пустой контента, что означает утверждать, макрос не работает. Таким образом, вы можете в финале когда издатель может использовать -DNDEBUG близких утверждения или #define NDEBUG добавлен к каждому исходному файлу, но это заявление должно быть помещено перед #include <assert.h>.
- Статические утверждения и static_assert
Мы утверждаем , утверждаем Runtime Руководства
стандарта C ++ 11, представили static_assert утверждения, утверждения Решая скомпилированы
static_assert (константа, предполагая , что строки).
Если первая константа аргумент true (или ненулевое значение), то не static_assert делать ничего, как если бы оно не было, или вызовет ошибку компиляции, расположение ошибки static_assert оператор строки, Второй параметр является ошибка строкой приглашения.
noexcept модификаторы оператора и noexcept
C ++ 98, динамическое исключение оператор броска (интермедиат, дважды), C ++ 11 являются устаревшими
1 аннулируются except_func () бросок ( INT , двойной ) {...}
Она представляет собой динамическую функция не будет сгенерировано исключением, объявленные исключения броска () была заменена на новых noexcept ненормальной декларации
- noexcept
except_func недействительными () noexcept; представляет собой не бросать
пустот (except_func) noexcept (постоянное выражение); выражение истинно не бросает исключение; flase брошен