Ce a ajuns C++
Ultima postare: iun 02 2018 09:45, Inițiat de
dani.user
, mai 26 2018 12:58
·
0
#1
Publicat: 26 mai 2018 - 12:58
Limbajul C++ e mult mai puternic decat au multi impresia. Cum puterea e adesea acompaniata de complexitate, standardele mai noi au contribuit considerabil la reducerea acestei complexitati.
Sa luam un exemplu: Quote As dori sa pot itera prin toate elementele produsului cartezian a n containere. Adica, daca am ('a', 'b', 'c', 'd') si (1, 2, 3), vreau sa pot afisa pe ecran: a 1 a 2 a 3 b 1 b 2 b 3 c 1 c 2 c 3 d 1 d 2 d 3 O prima solutie ar folosi doua bucle for, dar ce fac daca vreau un cod mai generic, daca nu stiu in avans de cate bucle for am nevoie? C++-ul modern imi permite sa creez o functie foarte usor de folosit: int main() { char letters[] { 'a', 'b', 'c', 'd' }; std::vector<int> numbers{ 1, 2, 3 }; cartesianProduct([](char letter, int number) { std::cout << letter << ' ' << number << '\n'; }, letters, numbers); } Ii ofer containerele si ce sa faca, iar ea imi va chema acel callback pentru fiecare set de valori. Se observa si ca ma ales containere diferite pentru litere si numere, functiei nu ii pasa. E atat de generica, incat ii pot da usor inca un container: int main() { char letters[] { 'a', 'b', }; std::vector<int> numbers{ 1, 2, 3 }; std::string strings[] { "abc", "def" }; cartesianProduct([](char letter, int number, const std::string& str) { std::cout << letter << ' ' << number << ' ' << str << '\n'; }, letters, numbers, strings); } Quote
a 1 abc a 1 def a 2 abc a 2 def a 3 abc a 3 def b 1 abc b 1 def b 2 abc b 2 def b 3 abc b 3 def Cum arata codul efectiv? Nu foarte frumos, dar usor de inteles
Spoiler
Oare ce assembly va genera acest cod? Suprinzator, daca efectuez un calcul constant, compilatorul merge pana intracolo incat sa introduca constanta rezultata in assembly: https://godbolt.org/g/kV6CpM Editat de dani.user, 26 mai 2018 - 14:39. |
#4
Publicat: 26 mai 2018 - 14:10
Totusi, sa ne intoarcem la ce plus plus
Despre AI, Orwel, si cum se contureaza viitorul in industrie avem alte topice. Discutia a fost mutata: https://forum.softpe...eligenta-umana/ Editat de dani.user, 26 mai 2018 - 14:41. |
#5
Publicat: 26 mai 2018 - 14:11
dani.user, on 26 mai 2018 - 12:58, said: int main() { char letters[] { 'a', 'b', 'c', 'd' }; std::vector<int> numbers{ 1, 2, 3 }; cartesianProduct([](char letter, int number) { std::cout << letter << ' ' << number << '\n'; }, letters, numbers); } import itertools for element in itertools.product(["a", "b", "c", "d"],[1, 2, 3]): print(element) |
#12
Publicat: 26 mai 2018 - 19:42
dani.user, on 26 mai 2018 - 12:58, said:
Limbajul C++ e mult mai puternic decat au multi impresia. Arta ingineriei software este sa folosesti uneletele potrivite pentru taskul potrivit. Nu exista un limbaj de programare ca virgula panaceu universal, acesta este un mit. |
#14
Publicat: 27 mai 2018 - 17:52
Aș zice să nu mai amestecăm noțiuni; cartesianProduct() este o funcție de bibliotecă și putea foarte bine să nu existe; deasemenea acea funcție o poți crea singur indiferent ce limbaj de programare folosești; poți crea propria bibliotecă de funcții pe care să le folosești de câte ori ai nevoie de ele.
|
#16
Publicat: 31 mai 2018 - 22:00
Bravo, ai descoperit template meta programming.
C++14-17 are tot felul de alte chestii mult mai interesante din punctul meu de vedere. Și C++20 o să aibă chiar chestii pe care le are Java de vro 25 de ani. De genul string.beginsWith() etc. În fine, nu scula e importantă ci cum o folosești. Am văzut cod c++ scris varză dar am văzut și mega elegant. |
#17
Publicat: 01 iunie 2018 - 17:49
blotunga, on 31 mai 2018 - 22:00, said:
Bravo, ai descoperit template meta programming. C++14-17 are tot felul de alte chestii mult mai interesante din punctul meu de vedere. Și C++20 o să aibă chiar chestii pe care le are Java de vro 25 de ani. De genul string.beginsWith() etc. "Auzi hai sa cream si noi un fel de JVM ca sa poate rula codul oriunde, facandu-l cu adevarat portabil si nu semantic-portabil" =)) |
Anunturi
Bun venit pe Forumul Softpedia!
▶ Utilizatori activi: 1
0 membri, 1 vizitatori, 0 utilizatori anonimi