View Single Post
Sitat av s1gh Vis innlegg
Ny og forholdsvis simpel kodesnutt.

Språk: C++

Kode

#include <iostream>

using std::cout;
using std::endl;

template <class A>
A Something(A a, A b)
{
	return (a>b)?a:b;
}

int main()
{
	char a = 's', b = 't';
	cout << Something<char>(a, b) << endl;
	cout << (int)Something<char>(a, b) << endl;
	return 0;
}
Hva gjør koden, og hva vil den spytte ut?
Vis hele sitatet...
Det opprettes en funksjonstemplate, en funksjon som kan operere med generiske typer. Funksjonen du har opprettet tar inn to objekter og returnerer det største av dem. 't' vil være større enn 's' hvis man tar en titt på ASCII-tabellen, noe som påpekes når du faktisk caster resultatet til en integer etterpå. Den letteste måten å tenke seg det på er at s=115 og t=116 (jmf. tabellen) og syntaksen return (expression)?x:y er en 'forkortet' versjon av if(expression){ return x } else{ return y}.

Programmet skriver derfor først ut 't' og så integerverdien til 't' som, er 116.


Ny oppgave. Denne er kanskje litt utradisjonell, men den kan være interessant å prøve å forstå.

Kode

int magisk(int i) {
  int j = 1337, k = 0;
  do k -= i += (i<0) + i;
  while (j *= 42);
  return k;
}
Denne snutten kan implementeres direkte i nesten hvilket som helst programmeringsspråk, men det er hva den faktisk gjør jeg er interessert i å vite. En C-versjon er lagt ut her: http://pastebin.com/25z7uGLc så prøv å variere litt på tallet den kalles med og se om dere forstår HVA den gjør og HVORFOR det skjer. Blir det for vanskelig kan vel noen andre poste en ny oppgave etterhvert