LINUX.ORG.RU

История изменений

Исправление monk, (текущая версия) :

В большинстве случаев обобщённый(полиморфный) код мономорфизируется на этапе компиляции

Ну-ну. Попробуй посмотреть выхлоп компилятора на

 int run() 
  { 
    int res = 0; 
    for(int i=1; i<=100; i++) res+=i; 
    return res; 
  };

и

  int run1() 
  { 
    std::list<int> x(100);
    std::iota(x.begin(), x.end(), 1);
    return std::accumulate(x.begin(), x.end(), 0);
  }  

Первое схлопывается до return 5050, а второе раскладывается в честный цикл, так как компилятор недостаточно умён.

Исходная версия monk, :

В большинстве случаев обобщённый(полиморфный) код мономорфизируется на этапе компиляции

Ну-ну. Попробуй посмотреть выхлоп компилятора на

 int run() 
  { 
    int res = 0; 
    for(int i=1; i<=100; i++) res+=i; 
    return res; 
  };

и int run1() { std::list<int> x(100); std::iota(x.begin(), x.end(), 1); return std::accumulate(x.begin(), x.end(), 0); }

Первое схлопывается до return 5050, а второе раскладывается в честный цикл, так как компилятор недостаточно умён.