Pull to refresh

Немного Python'о-подобных функций в C++11

Reading time2 min
Views2.3K
От меня лично:
С++11 ничего особо существенного не принес в язык. Грубо говоря, просто упростил некоторые моменты. Ведь гибкость С++ позволяет делать все(почти все: не пылесосит). Но все же, согласитесь это приятно, когда один из не самых легких языков программирования становится доступнее для понимания, проще для восприятия, удобней для работы.

Перевод текста под катом. Автор John D. Cook.

Новый стандарт С++(то есть С++11) содержит немного Python'о-подобных функций, на которые я натыкался последнее время. В данной статье пойдет речь непосредственно о for-loops и raw strings.

В Python'е вы можете пройтись по списку без какого либо счетчика цикла. Например:
    for p in [2, 3, 5, 7, 11]:
        print p

Нечто подобное можно использовать и в С++11:
    int primes[5] = {2, 3, 5, 7, 11};
    for (int &p : primes)
        cout << p << "\n";

Еще у Python'а есть raw string. Если добавить перед строкой букву R, строка интерпретируется посимвольно. Например код:
    print "Hello\nworld"

Даст следующий результат:
Hello
world


Но:
print R"Hello\nworld"

Выведет:
Hello\nworld

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

В С++11 raw string используются так же, но так же требуют разделителя внутри кавычек:
    cout << R"(Hello\nworld)";

Синтаксис raw string в С++11 читать немного сложнее, чем у его коллеги Python. Преимуществом однако есть то, что такие строки могут содержать двойные кавычки, сами по себе они не прекращают строку. Например:
    cout << R"(Hello "world")"; //здесь хабр немного не правильно подсвечивает синтаксис

Выведет:
Hello «world»

В Python это не нужно, так как одинарные и двойные кавычки являются взаимозаменяемыми. Что бы получить двойные кавычки внутри строки, нужно использовать одинарные снаружи и наоборот. Так же обратите внимание, что raw string в С++11 требуют большой буквы R, в отличии от Python'a, в котором можно использовать и большую и маленькую.

Функции С++11 поддерживаются gcc 4.6.0. MinGW версию gcc для Windows можно скачать здесь. Для использования функций С++11, необходимо добавить следующий параметр в командную строку -std=c++0x.
Например:
g++ -std=c++0x hello.cpp

Visual Studio 2010 поддерживает много нового из функций С++11, но, увы, они здесь не описаны.
Tags:
Hubs:
+3
Comments5

Articles

Change theme settings