Jego głównym zadaniem jest przerobienie istniejącego kodu, wprowadzając nowe mechanizmy ze standardu C++11. Nie jest tego wiele, ale pokazuje, jakie moce drzemią w samym clang-u. Testy przeprowadzałem na wersji 3.5
clang-modernize -add-override \ -loop-convert \ -pass-by-value \ -replace-auto_ptr \ -use-auto \ -use-nullptr \ cpp_modernize.cppNiestety nie udało mi się zmusić do działania opcji "pass-by-value", które ma pozwolić na zadziałanie move sementic.
#include <iostream> #include <memory> #include <vector> #include <map> class ICar { public: virtual ~ICar() {}; virtual int engine(const std::string& name) = 0; }; class Car : public ICar { public: - virtual int engine(const std::string& name) { + virtual int engine(const std::string& name) override { std::cout << "Engine " << name << " start" << std::endl; return 44; } }; std::vector<std::string> rewrite(const std::map<std::string, int> m) { std::vector<std::string> out; - for (std::map<std::string, int>::const_iterator it = m.cbegin(); it != m.cend(); ++it) { + for (auto it = m.cbegin(); it != m.cend(); ++it) { out.push_back(it->first); } return out; } int main() { std::map<std::string, int> m = {{"3", 3}, {"4", 4}, {"8", 8}}; std::vector<std::string> v = rewrite(m); - std::auto_ptr<ICar> ferrari(new Car()); + std::unique_ptr<ICar> ferrari(new Car()); int oil_counter = 0; - for (int i = 0; i < v.size(); ++i) { - if (ferrari.get() != NULL) { - int result = ferrari->engine(v[i]); + for (auto & elem : v) { + if (ferrari.get() != nullptr) { + int result = ferrari->engine(elem); oil_counter += result; } } return 0; }