mer, 23/05/2012 - 12:42 — Ekleog
> Epsilon, je ne veux pas te contredire, mais c++ fait pareil que java
> sur au moins un point : le typage. Exemple en direct :
>
> #include \<iostream>
> int main() {
> short a = 1;
> short b = a \<\< 1;
> std::cout \<\< b;
> }
> (Strange le besoin de mettre < pour un \< dans une balise
> code ...)
>
> tmp\$ g++ -Wconversion a.cpp
> a.cpp: In function 'int main()':
> a.cpp:4:19: warning: conversion to 'short int' from 'int' may alter
> its value [-Wconversion]
>
> (Oui, certaines personnes ont une liste de toutes les options de
> warning et les activent toutes dans leur Makefile / autre ; et j'ai
> découvert ça avec un projet qui était légèrement plus complexe ... Tu
> devines mon étonnement !)
gcc te propose (c'est une option hein) de te sortir un warning si une telle conversion apparait, ce n'est en aucun cas
standard :
n3290 4.7 [conv.integral]
§1 A prvalue of an integer type can be converted to a prvalue of another integer type. A prvalue of an unscoped
enumeration type can be converted to a prvalue of an integer type.
§3 If the destination type is signed, the value is unchanged if it can be represented in the destination type (and
bit-field width); otherwise, the value is implementation-defined.
En java, c'est une erreur.
Il y a juste un cas où C++ est un peu piquant sur les types c'est avez les initializer lists, mais en même temps c'est
obligatoire pour pouvoir déterminer son type.
mer, 23/05/2012 - 16:49 — Shloub
> - généricité/introspection
>
> Il y a de l'introspection en C++ ? (C'est pas ce que j'ai lu dans
> l'article https://sites.google.com/site/steveyegge2/tour-de-babel)
En effet, Java permet l'introspection alors qu'en C++ ce n'est qu'un proposal ou il faut passer par des moc.
Je parlais de la programmation générique, Java implémente les generics en utilisant le type erasure, c'est à dire que
en fait, Java ne supporte pas vraiment la programmation générique. Après ça dépend ce que tu appelles généricité,
certains dirons que « void f(int){} int main(void){ f(4.2); } » c'est de la programmation générique en C à cause de
l'implicit cast double -> int.
Dans le même domaine, C++ permet de faire de la metaprogrammation, pas Java (pas de la même manière pour être précis). À
ce sujet, je conseille aux programmeurs C++ de regarder : Metaparse: Compile-time parsing with template
metaprogramming qui permet de construire et d'utiliser un
parseur au compile time avec des string literals et définir ainsi des DSL simplement… au compile time. Simplement WTF.
mer, 23/05/2012 - 16:49 — Shloub
> - typage/short
>
> Je suis pas sûr que short soit fait pour ce type d'opérations, assez
> subjectif, certes.
Le problème c'est que ce n'est pas consistant. Et short est fait pour rien en Java, sérieusement Java se veut orienté
objet et ils ont des “types primitifs” et des arrays…
mer, 23/05/2012 - 16:49 — Shloub
> - mémoire/fichiers
>
> Finally ? Sinon ce serait comment en C++ ?
Tu fais un bloc try/finally sur toute ta fonction ? Une chose très belle à n'en pas douter. Dans tout les cas il faut
le faire (et c'est pas aussi simple que d'écrire juste « finally », tu peux vouloir relancer la même exception selon
quelle instruction l'a causé), en C++ le fichier est fermé dans le destructeur qui est appelé à la fin du scope (SBRM =
Scope Bound Ressource Management), on fait pareil avec la mémoire. C.f. le code écrit par Ekleog.
mer, 23/05/2012 - 16:49 — Shloub
> - gros logiciel
>
> La surcouche Android ? SAP & co ?
Je vais arrêter avec les logiciels parce qu'apparemment je suis le seul à ne pas utiliser Java. Je pense tout de même
que ça reste très minoritaire par rapport à C ou C++ (et ceux citant le pseudo-index tiobe devraient regarder comment il
est calculé et en rire).