infoarena

infoarena - concursuri, probleme, evaluator, articole => Informatica => Subiect creat de: MciprianM din Ianuarie 30, 2012, 13:04:03



Titlul: C++ secvential vs paralel vs concurent
Scris de: MciprianM din Ianuarie 30, 2012, 13:04:03
http://infoarena.ro/job_detail/670885?action=view-source (http://infoarena.ro/job_detail/670885?action=view-source)

E intr-adevar nevoie de main? Stiu ca daca nu avem main, vom primi o eroare de genul "entry point must be defined". Dar pare ca nu e nevoie de aceasta functie intotdeauna.

Si daca avem urmatorul cod:

Cod:
int glob = 2;
int glob2 (3);
class A {
public:
  A () {
      glob = 4;
      glob2 = 5;
  }
};
class B {
public:
  B () {
      glob = 6;
      glob2 = 7;
  }
};
A a;
B b;
int main () {
  cout << glob << " " << glob2 << endl;
  return 0;
}

Ce va afisa? Intotdeauna? Adica constructorii se executa secvential, pe rand, de sus in jos? E garantat asta de standard? Ar fi greu de transformat C++ ul intr-un limbaj concurent sau paralel cu bucati care se executa garantat secvential? Ca si sintaxa, eu cred ca ar putea ramane la fel, atata doar ca Definirea  variabilelor sa se execute concurent - la fel si instructiunile din main. Voi ce credeti?


Titlul: Răspuns: C++ secvential vs paralel vs concurent
Scris de: Ababab din Ianuarie 31, 2012, 00:56:42
Poți să nu folosești main, desigur, ideea e că tot trebuie să ai ceva asemănător, fără nu se poate. Cum zice și eroare pe care ai amintit-o, nu trebuie neapărat main, ci un entry point. Erau niște "probleme" (în glumă, oarecum) care te puneau să faci un program fără main, dar erau mai mult niște bancuri seci, ca și cel care punea să printezi ceva fără ; (punct și virgulă), workaround-ul fiind ceva de genul if(printf("ceva")){}.

În concluzie fără entry point nu merge. Dacă găsește cineva vreo soluție, să mă anunte și pe mine. :)

Cât despre constructori, eu zic că e destul de normal să se execute de sus în jos și că e destul de standard, altfel nu prea ar avea logică. Totuși, nu cred că e o idee să lași ambiguitate, mă refer aici la variabilele inițializate global, în special dacă nu ești singurul care o să lucreze cu acele clase. Și chiar dacă nu ar fi problema da mai mulți, probabil ai vrea să apelezi un constructor fără să schimbi variabila globală, etc, motive sunt.

Dacă și la asta se găsește excepție, pe asta chiar vreau să o știu. :D

O zi bună.