C ++ не знает семь характеристик, абсолютный человеческий круг Ван Вэй

В качестве компьютерного языка, C ++ претерпел множество изменений и изменений.

Конечно, эти изменения не будут достигнуты в течение ночи. C ++ является отсутствие жизненных сил и инноваций, поэтому она не пользуется популярностью.

Но после того, как C ++ комитет по стандартизации решил ускорить развитие языка, ситуация изменилась.

Начиная с 2011 года, C ++ компьютерный язык стал динамичный, развивающийся, очень любил.
Наконец, если вам , если вы столкнулись с трудностями в обучении, ищет C ++ обучения среды, может присоединиться к нашей Learning Circle C ++, нажмите кнопку Я присоединился к нему , это позволит сэкономить много времени, сократить число проблем , возникающих в ходе исследования.

C ++ не знает семь характеристик, абсолютный человеческий круг Ван Вэй

После преобразования в C ++ тоже не просто, сколько еще один из самых сложных языков программирования. Тем не менее, C ++ действительно более гуманным, чем раньше.

Эта статья говорить о некоторых новых функциях C ++ (с 8-летним C ++ 11, к примеру), я считаю, что каждый программист будет заинтересован в этой теме.

Примечание: Эта статья пропустить некоторые из дополнительных функций.

  1. Ключевые слова авто

Когда впервые в C ++ 11 авто, программисты, которые плакали!

Это означает, что авто C ++ компилятор может вывести тип данных во время компиляции, так что вы не всегда должны объявить тип данных. Если тип данных является карта <строка, вектор <пара <Int, Int >>> особенно, когда это удобно.

Нет инициализатор, вы не можете объявить тип данных (см пятую строчку). Это правдоподобно. Инструкции пятой строки и не позволить компилятору вывести тип данных.

Первоначально функция автоматического ограничена. После новой версии в C ++, функция автоматической работы все более и более мощной.

C ++ не знает семь характеристик, абсолютный человеческий круг Ван Вэй

Используйте седьмую строку и восьмую строку в скобках инициализации (bracketedinitialization), который является одним из новых функций 11 C ++.

Пожалуйста, обратите внимание, что использование авто, компилятор должен иметь возможность получить тип данных.

Возникает интересный вопрос: если вы написали autoa = {1, 2, 3} Что будет? Это сборник ошибок, это? Это вектор?

C ++ не знает семь характеристик, абсолютный человеческий круг Ван Вэй

На самом деле, C ++ 11 вводит зЬй :: initializer_list <тип>. Если заявление авто, брекет список инициализации, как легковесные контейнеры.

Наконец, как было сказано ранее, когда сложные структуры данных, тип компилятора статистических выводов полезно:

C ++ не знает семь характеристик, абсолютный человеческий круг Ван Вэй

别忘了检查第25行!auto [v1,v2] = itr.second纯粹是C++17的新特性。这个特性叫做结构化绑定。在旧版本C++中,程序员需要单独获取每个变量。但是结构化绑定给这一过程带来了便利。此外,如果想获得数据使用引用(reference),只需要加上一个symbol--auto&[v1,v2] = itr.second.

  1. Lambda表达式

C++11引入了lambda表达式,这类似于JavaScript里的匿名函数。它们都是函数对象,没有名字,且基于简洁的语法在不同作用域上捕获变量。它们也可以被分配给变量。

如果需要在代码中进行一些小而快的操作,又不愿意为此单独写一个函数,那么Lambdas很有用。另一种常见用法是将lambdas作为比较函数。

不知道C++这七大特性,绝对枉为圈中人

以上例子可以说明很多问题。

首先,请注意花括号初始化是如何提升权重的。然后是通用的begin(),end() (这也是C++11的新增部分)。接着是作为数据比较器的lambda函数。lambda函数的参数被声明为auto(这是C++14的新增部分)。在C++14之前是不能对于函数参数使用auto 的。

正如现代C++的awesome库中定义的那样:

· []—不捕获任何对象。所以不能在lambda表达式内使用全局作用域的局部变量,只能使用参数。

· [=]— 按值捕获作用域中的局部对象(局部变量,参数)。只可使用不可修改。

· [&]—按引用捕获作用域中的局部对象(局部变量,参数)。可以被修改。例子如下。

· [this]—按值捕获this 指针。

· [a, &b]—按值捕获对象a ,按引用捕获对象b。

所以,如果想在lambda函数内部将数据转换为其他格式,可以利用作用域的优势来运用lambda.比如:

不知道C++这七大特性,绝对枉为圈中人

在上面这个例子中,如果在lambda表达式中按值捕获([factor])局部变量,则不能改变第五行的factor.原因很简单——没有权限。

最终,请注意示例中使用了val 作为引用 (reference). 这确保了lambda函数内部的任何变化都会改变vector.

不知道C++这七大特性,绝对枉为圈中人

学完现代C++后,她们乐开了花!(摄影:Ian Schneider 图源:Unsplash)

  1. if/switch内的初始化语句

C++17的这个特性十分讨喜:

不知道C++这七大特性,绝对枉为圈中人

很明显,现在可以同时在if/switch句块内进行变量初始化和条件检查。这有助于保持代码简洁精炼。通用形式为:

if( init-statement(x);condition(x)) {
// do some stuff here
} else {
// else has the scope of x
// do some other stuff
}

  1. 在编译时使用constexpr

constexpr 很棒!假如要评估一些表达式,且它的值一旦初始化就不会改变,那么可以预运算其值并将之作为宏。或者利用C++11提供的constexpr.

程序员倾向于尽量减少程序运行时间。所以,如果能让编译器进行一些操作并减小程序运行的压力,那么就可以缩短运行时间。

不知道C++这七大特性,绝对枉为圈中人

以上代码是constexpr的常见例子之一。既然声明斐波那契数列函数为constexpr, 那么编译器就可以在编译时预运算fib(20). 所以编译之后,可以用constlong long bigval = 2432902008176640000来替代const longlong bigval = fib(20).

请注意,传递参数是一个const 值。这是被声明为constexpr的函数的一个重点——传递参数应该是constexpr或const。否则这里的函数会和普通函数一样,也就是说编译时不进行预运算。

变量也可以是constexpr. 在这种情况下,这些变量在编译时必须可评估;否则会出现编译错误。

Интересно, что позже ввел constexpr-если и constexpr-лямбда в C ++ 17.

  1. кортежей кортежи

Очень похож на пары, кортеж представляет собой набор значений фиксированного размера различных типов данных.

C ++ не знает семь характеристик, абсолютный человеческий круг Ван Вэй

Иногда, по сравнению с кортежем, используйте зЬй :: массив удобнее. массив с функциями массива, как простой стандартной библиотеки C на C ++. Эта структура данных является новым C ++ 11.

  1. Класс аргумент шаблона вычет

Имя свойства довольно многословно. C ++ 17 запуска из стандартного шаблона класса аргументов шаблона вычета может быть осуществлен. До этого, аргумент шаблона вычет поддерживают только шаблон функции. Результат:

станд :: Пара <станд :: строка, Int> пользователь = { "М", 25}; // предыдущий
пользователь станд :: пара = { "М", 25}; // C ++ 17

Этот вывод «скрытый». Этот кортеж еще удобнее.

// предыдущий
станд :: кортеж <станд :: строка, станд :: строка, Int> пользователь ( "M", "Чи", 25);
// вывод в действии!
станд :: кортеж пользователь2 ( "М", "Чи", 25);

Эта функция не является гораздо более полезным для людей, не знакомых с шаблонами C ++ для.

  1. Интеллектуальные указатели

Pointer иногда ужасно. Поскольку язык C ++ дает программисту большую степень свободы, так что иногда легко выстрелить себе в ногу. И во многих случаях, проблема вызвана указателем.

К счастью, C ++ 11 вводит смарт-указатели, интеллектуальные указатели гораздо удобнее, чем обычный указатель. Они помогают программистам, чтобы предотвратить утечку памяти за счет своевременного выпуска памяти. Они также способствуют код достигает аномальный уровень безопасности.

C ++ вводит множество новых возможностей последней версии компьютерного языка. Если вы заинтересованы, вы можете понять.

C ++ не знает семь характеристик, абсолютный человеческий круг Ван Вэй

рекомендация

отblog.51cto.com/14209412/2404803