Ar trebui să folosesc o excepție specificator în C++?



În C++, puteți specifica faptul că o funcție poate sau nu poate arunca o excepție prin utilizarea o excepție de specificator. De exemplu:



```
void foo() throw(); // guaranteed not to throw an exception
void bar() throw(int); // may throw an exception of type int
void baz() throw(...); // may throw an exception of some unspecified type
```

Am'm îndoiesc de fapt, folosindu-le pentru următoarele:


1. Compilatorul nu't într-adevăr intareasca excepție proiectanti, în orice mod riguros, astfel încât beneficiile nu sunt mari. În mod ideal, doriți să obțineți o eroare de compilare.
2. Dacă o funcție încalcă o excepție de specificator, cred standard de comportament este de a termina programul.
3. În VS.Net, tratează arunca(X) ca arunca(...), astfel încât aderarea la standardul nu este puternic.


Crezi excepție specificatori ar trebui să fie folosit?
Vă rugăm să răspundeți cu "da" sau "nu" și de a oferi unele motive pentru a justifica răspunsul.
Nr.


Aici sunt mai multe exemple de ce:


1. Cod șablon este imposibil de a scrie cu excepția caietul de sarcini,


șablon
void f( T k )
{
T x( k );
x.x();
}
Copiile ar putea arunca, parametrul care trece ar putea arunca, și `x()` s-ar putea arunca unele necunoscute excepție.


2. Excepție-caietul de sarcini tind să interzică extensibilitate.


virtual void open() throw( FileNotFound );


ar putea evolua în


virtual void open() throw( FileNotFound, SocketNotReady, InterprocessObjectNotImplemented, HardwareUnresponsive );


Ai putea chiar scrie ca


arunca( ... )


Primul nu este extensibil, cel de-al doilea este un proiect mult prea ambițios și cel de-al treilea este într-adevăr ceea ce vrei să spui, atunci când scrie funcții virtuale.


3. Cod moștenire


Atunci când scrie cod care se bazează pe o altă bibliotecă, nu't știu ce ar putea face atunci când ceva nu merge oribil greșit.


int lib\_f();


void g() throw( k\_too\_small\_exception )
{
int k = lib\_f();
dacă( k < 0 ) arunca k\_too\_small\_exception();
}


"g" se va termina, când lib\_f()`aruncă. Aceasta este (în cele mai multe cazuri), nu ceea ce vrei cu adevărat.`std::termina()` nu ar trebui să fie numit. Este întotdeauna mai bine să lăsați aplicația accident cu o excepție netratată, de la care puteți prelua un stack trace, decât la tăcere/violent muri.


4. Scrie cod care returnează erori comune și aruncă în ocazii excepționale.


Eroarea e = open( "bla.txt" );
if( e == FileNotFound )
MessageUser( "Fișier bla.txt nu a fost găsit" );
if( e == AccessDenied )
MessageUser( "nu a Reușit să deschidă bla.txt, pentru că nu ne't au citit drepturile ..." );
dacă( e != Succes )
MessageUser( "nu a Reușit din cauza la un alt eroare, codul de eroare = " + itoa( e ) );


încercați
{
std::vector k( 1000 );
// ...
}
a prinde( const bad\_alloc& b )
{
MessageUser( "de memorie, ieșirea procesului de" );
arunca;
}


Cu toate acestea, atunci când bibliotecă doar aruncă-ți de propriile excepții, puteți utiliza excepție caietul de sarcini a stat intenția ta.
Mă aștept răspunsul real este pur și simplu: nu a fost un bun exemplu de utilizare. Pentru cazuri, avantajul este acela că permite o fluente API asupra tipurilor existente (care nu se furnizează logica) - și anume



```
var foo = data.Where(x=>x.IsActive).OrderBy(x=>x.Price).First();

```

care permite LINQ:



```
var foo = (from x in data
           where x.IsActive
           order by x.Price
           select x).First();

```

Cu metode statice, acest lucru pur și simplu nu este o problemă, astfel încât nu există nici o justificare; doar utiliza metoda statică pe al doilea tip.


Așa cum este, metodele de extensie nu sunt *corect* obiect orientate - ele sunt un abuz pragmatic pentru a face viața mai ușoară în detrimentul purității. Nu a fost nici un motiv pentru a dilua metode statice în același mod. * Notă: a se vedea <http://www.jetbrains.net/devnet/message/5244658> pentru o altă versiune a acestui răspuns.


Citind posturile, se pare că există o anumită confuzie cu privire la întrebarea inițială. Lasă-mă să o lovitură de cuțit la ea.


Postul original este într-adevăr cere întrebarea: „Cum pot identifica și elimina referințele dintr-un proiect Visual Studio pentru alte proiecte / ansambluri care nu sunt în uz?“ Afișul vrea ansamblurile să nu mai apară ca parte a producției construi.


În acest caz, Resharper vă poate ajuta să *identificați* ei, dar trebuie să *eliminați* - le tine. 


Pentru a face acest lucru, deschide Referințe inth Solution Browser, faceți clic dreapta pe fiecare ansamblu de referință, și alege „Find Code dependent“. Vedea:


<http://www.jetbrains.com/resharper/features/navigation_search.html#Find_ReferencedDependent_Code>


Vei primi fie:


1. O listă a dependențele pe această referință într-o fereastră de browser, sau
2. Un dialog care vă spune „Codul dependent de XXXXXXX modul nu a fost găsit.“.


Dacă obține al doilea rezultat, puteți apoi să faceți clic pe mouse-dreapta Reference, selectați Eliminare și scoateți-l din proiectul dumneavoastră.


În timp ce trebuie sa la acest „manual“, adică o referință la un moment dat, se va face treaba. Dacă cineva a automatizat acest lucru într-un fel Sunt interesat de audiere cum a fost făcut.


Puteți ignora destul de mult pe cele din .Net Framework, deoarece nu, in mod normal copiate de ieșire dvs. construi (de obicei - cu toate că nu este neapărat adevărat pentru aplicațiile Silverlight).


Unele posturi par să fie răspunsul la întrebarea: „Cum pot elimina folosind clauzele (C #) dintr-un fișier de cod sursă care nu sunt necesare pentru a rezolva orice referințe în acel dosar“. 


În acest caz, Resharper ajută în câteva moduri:


1. Identifică folosind clauze neutilizate pentru timpul pe detectarea erorii zbura. Ele apar ca avertismente de inspecție de cod - codul va apărea culoarea gri (fie implicit) în fișierul și Resharper va oferi un indiciu pentru al elimina:


<http://www.jetbrains.com/resharper/features/code_analysis.html#On-the-fly_Error_Detection>
2. Vă permite să le eliminați în mod automat, ca parte a procesului de Cod Cleanup:


<http://www.jetbrains.com/resharper/features/code_formatting.html#Optimizing_Namespace_Import_Directives>


**În cele din urmă, dau seama că Resharper face analiza codul static pe soluția. Deci, dacă aveți o referință dinamică a ansamblului - spune prin reflecție sau un ansamblu care este încărcată dinamic în timpul rulării și accesate prin intermediul unei interfețe - nu se va ridica.**  Nu există nici un substitut pentru înțelegerea dvs. de baza codului și dependențele de proiect în timp ce lucra la proiectul dumneavoastră. Fac găsi Resharper caracteristici foarte utile. nu, pentru a face asta iti trebui un ide ca devc++ sau codeblocks. „Expressive“ înseamnă că este ușor de a scrie cod care este ușor de înțeles, atât pentru compilator și pentru un cititor uman.


Doi factori care fac pentru expresivitate:


* constructe intuitiv care pot fi citite
* lipsa de cod boilerplate


Comparați acest expresiv Groovy, cu eqivalent Java mai puțin expresiv:



```
3.times {
   println 'Hip hip hooray'
}

```

vs



```
for(int i=0; i<3; i++) {
    System.out.println("Hip hip hooray");
}

```

Uneori tranzactionati de precizie pentru expresivitate - exemplul Groovy funcționează pentru că se presupune lucruri pe care Java face să specificați în mod explicit. my 2 cents:

când implementezi un api nu mi se pare logic să “ghicești” ce fel de date primești pe baza inputului primit. de obicei modul de encodare a datelor îl determini folosind una din metodele de mai jos:

trimițând un http header când faci requestul (clientul api-ului) - considerat best prac… la majoritatea extensiilor (excepție .ro) se aplică verificarea căsuței de e-mail, însă acest lucru nu reprezintă o regulă de bază. ulterior înregistrării unui domeniu, este indicată verificarea căsuței de email pentru a verifica dacă extensia achiziționată necesită verificări suplimentare. bai fratilor! c++ nu trebuie sa stii neaparat html si java
c++ este un soft cu acre poti face programe. de exemplu power point e facut cu c++ cu tot cu interfata.
ce sa inveti. si eu sunt pasionat de programare, dorinta e mare.
cu ce te ajuta programarea? ai sanse mai amri sa te angajezi undeva in softwere. depozite de calculatoare sau magazine. sau la un institut de programari. faci programe.
cartea de c++ are in jur de 6-700 de pagini si e complexa. ceea ce ti.ar lua vreo 2 ani sa il cunosti si tot nu ai descoperi complet.

eu iti recomand visual basic. este fratele mai mic a lui c++
mai pe romaneste c++ este un cod
ia visual basic de pe net, varianta 2008 mai precis. e mai bun/
apoi fugi la biblioteca si ia cartea de visual basic 2008.
acolo gasesti instructiuni cum sa faci un program si cum sa programezi.
e mai usor de 10 ori ca c++ si il inveti repede. apoi cand ai invatat asta poti invata si c++ mai repede. o sa ai cunostiintele necesare de programare.
cand te apuci de visual basic trebuie sa stii ce vrei sa faca acel program pe care tu vrei sa il construesti.
tu nu trebuie decat sa respecti cartea.
asta e recomandarea mea. 
bafta. depinde de cont eu cand ma las de ceva joc il dau la cineva sau il pun pe parole si conturi ori il las asa si la status daca apare scriu nu mai joc driverul recomandat este testat, este o versiune finală. versiunile finale sunt certificate de microsoft (whql).
driverul opțional este un driver încă în varianta beta, poate oferi performanțe mai mici, similare sau mai mari. nu este un driver stabil de fiecare dată.
poți verifica răspunsul driverelor efectuând un stress test. astfel, soliciți placa video și driverul la potențial maxim. urmărești răspunsul plăcii video în ceea ce privește posibile artefacte datorate driverului.

poți testa pe rând cele două drivere, efectuând câte un "stress test" pentru fiecare în parte. 
msi kombustor face o treabă grozavă pentru măsurarea eficienței, a consumului, a temperaturii și al posibilelor artefacte apărute : https://www.google.com/url?sa=t&source=web&rct=j&url=https://geeks3d.com/furmark/kombustor/&ved=2ahukewiog7ou8etxahvvhf0hhsfwdb0qfjaaegqibrac&usg=aovvaw14y\_vaubb7avacmu12x

pe noi ne interesează driverul opțional, îl instalezi și-l testezi în kombustor (opțiunea msi-farmark) cu rezoluția maximă a monitorului, la frecvența maximă suportată de monitor. urmărești, timp de jumătate de oră, o oră, comportamentul plăcii video și artefactele, dacă este cazul "ecranele albastre". dacă totul este în regulă, driverul este stabil, îl poți folosi fără probleme. atat timp cat folosesti paysafe poti pune ce vrei tu.
eu daca folosesc cardul si trebuie sa pun la datele de facturare datele mele altfel banca imi refuza tranzactia.