125
+ C++ Pub Quiz A 90 minute quiz session Oslo C++ Users Group Meetup October 2011 by Olve Maudal

C++ Pub Quiz - Programvareverkstedetoma/PubQuiz_CPP_Oct2011.pdf · C++ Pub Quiz A 90 minute quiz session Oslo C++ Users Group Meetup October 2011 by Olve Maudal

  • Upload
    others

  • View
    39

  • Download
    0

Embed Size (px)

Citation preview

Page 1: C++ Pub Quiz - Programvareverkstedetoma/PubQuiz_CPP_Oct2011.pdf · C++ Pub Quiz A 90 minute quiz session Oslo C++ Users Group Meetup October 2011 by Olve Maudal

+

C++ Pub Quiz

A 90 minute quiz sessionOslo C++ Users Group Meetup

October 2011

by Olve Maudal

Page 2: C++ Pub Quiz - Programvareverkstedetoma/PubQuiz_CPP_Oct2011.pdf · C++ Pub Quiz A 90 minute quiz session Oslo C++ Users Group Meetup October 2011 by Olve Maudal

oma@ubuntu:~/quiz$ uname -aLinux ubuntu 2.6.32-34-generic #77-Ubuntu SMP Tue Sep 13 19:40:53 UTC 2011 i686 GNU/Linuxoma@ubuntu:~/quiz$ gcc --versiongcc (GCC) 4.7.0 20111012 (experimental)Copyright (C) 2011 Free Software Foundation, Inc.This is free software; see the source for copying conditions. There is NOwarranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

$ g++ --std=c++0x -O -Wall foo.cpp && ./a.out

Here is how I compile and run the snippets:

Here is my development environment:

Page 3: C++ Pub Quiz - Programvareverkstedetoma/PubQuiz_CPP_Oct2011.pdf · C++ Pub Quiz A 90 minute quiz session Oslo C++ Users Group Meetup October 2011 by Olve Maudal

oma@ubuntu:~/quiz$ uname -aLinux ubuntu 2.6.32-34-generic #77-Ubuntu SMP Tue Sep 13 19:40:53 UTC 2011 i686 GNU/Linuxoma@ubuntu:~/quiz$ gcc --versiongcc (GCC) 4.7.0 20111012 (experimental)Copyright (C) 2011 Free Software Foundation, Inc.This is free software; see the source for copying conditions. There is NOwarranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

$ g++ --std=c++0x -O -Wall foo.cpp && ./a.out

Here is how I compile and run the snippets:

Here is my development environment:

The question for all code snippets is:

Page 4: C++ Pub Quiz - Programvareverkstedetoma/PubQuiz_CPP_Oct2011.pdf · C++ Pub Quiz A 90 minute quiz session Oslo C++ Users Group Meetup October 2011 by Olve Maudal

oma@ubuntu:~/quiz$ uname -aLinux ubuntu 2.6.32-34-generic #77-Ubuntu SMP Tue Sep 13 19:40:53 UTC 2011 i686 GNU/Linuxoma@ubuntu:~/quiz$ gcc --versiongcc (GCC) 4.7.0 20111012 (experimental)Copyright (C) 2011 Free Software Foundation, Inc.This is free software; see the source for copying conditions. There is NOwarranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

$ g++ --std=c++0x -O -Wall foo.cpp && ./a.out

Here is how I compile and run the snippets:

Here is my development environment:

The question for all code snippets is: What will happen on my machine?

Page 5: C++ Pub Quiz - Programvareverkstedetoma/PubQuiz_CPP_Oct2011.pdf · C++ Pub Quiz A 90 minute quiz session Oslo C++ Users Group Meetup October 2011 by Olve Maudal

oma@ubuntu:~/quiz$ uname -aLinux ubuntu 2.6.32-34-generic #77-Ubuntu SMP Tue Sep 13 19:40:53 UTC 2011 i686 GNU/Linuxoma@ubuntu:~/quiz$ gcc --versiongcc (GCC) 4.7.0 20111012 (experimental)Copyright (C) 2011 Free Software Foundation, Inc.This is free software; see the source for copying conditions. There is NOwarranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

$ g++ --std=c++0x -O -Wall foo.cpp && ./a.out

Here is how I compile and run the snippets:

Here is my development environment:

The question for all code snippets is: What will happen on my machine?

Full score is given if you manage to guess:

Page 6: C++ Pub Quiz - Programvareverkstedetoma/PubQuiz_CPP_Oct2011.pdf · C++ Pub Quiz A 90 minute quiz session Oslo C++ Users Group Meetup October 2011 by Olve Maudal

oma@ubuntu:~/quiz$ uname -aLinux ubuntu 2.6.32-34-generic #77-Ubuntu SMP Tue Sep 13 19:40:53 UTC 2011 i686 GNU/Linuxoma@ubuntu:~/quiz$ gcc --versiongcc (GCC) 4.7.0 20111012 (experimental)Copyright (C) 2011 Free Software Foundation, Inc.This is free software; see the source for copying conditions. There is NOwarranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

$ g++ --std=c++0x -O -Wall foo.cpp && ./a.out

Here is how I compile and run the snippets:

Here is my development environment:

The question for all code snippets is: What will happen on my machine?

Full score is given if you manage to guess: Whatever happens on my machine!

Page 7: C++ Pub Quiz - Programvareverkstedetoma/PubQuiz_CPP_Oct2011.pdf · C++ Pub Quiz A 90 minute quiz session Oslo C++ Users Group Meetup October 2011 by Olve Maudal

There are no trick questions here, most/all of the code snippets do produce the expected result and should be quite

easy if you really understand

Page 8: C++ Pub Quiz - Programvareverkstedetoma/PubQuiz_CPP_Oct2011.pdf · C++ Pub Quiz A 90 minute quiz session Oslo C++ Users Group Meetup October 2011 by Olve Maudal

PS: All the code snipppets do indeed compile, link and run on my machine. There are no missing semicolons or syntax errors.

There are no trick questions here, most/all of the code snippets do produce the expected result and should be quite

easy if you really understand

Page 9: C++ Pub Quiz - Programvareverkstedetoma/PubQuiz_CPP_Oct2011.pdf · C++ Pub Quiz A 90 minute quiz session Oslo C++ Users Group Meetup October 2011 by Olve Maudal

Disclaimer: the code snippets here are all crap examples of how to write C++. This is just for fun.

Page 10: C++ Pub Quiz - Programvareverkstedetoma/PubQuiz_CPP_Oct2011.pdf · C++ Pub Quiz A 90 minute quiz session Oslo C++ Users Group Meetup October 2011 by Olve Maudal

Disclaimer: the code snippets here are all crap examples of how to write C++. This is just for fun.

Remember, this is not about C++, nor G++, it is about:

Page 11: C++ Pub Quiz - Programvareverkstedetoma/PubQuiz_CPP_Oct2011.pdf · C++ Pub Quiz A 90 minute quiz session Oslo C++ Users Group Meetup October 2011 by Olve Maudal

Disclaimer: the code snippets here are all crap examples of how to write C++. This is just for fun.

Remember, this is not about C++, nor G++, it is about:

+ +

Page 12: C++ Pub Quiz - Programvareverkstedetoma/PubQuiz_CPP_Oct2011.pdf · C++ Pub Quiz A 90 minute quiz session Oslo C++ Users Group Meetup October 2011 by Olve Maudal

Questions

(45 minutes)

Page 13: C++ Pub Quiz - Programvareverkstedetoma/PubQuiz_CPP_Oct2011.pdf · C++ Pub Quiz A 90 minute quiz session Oslo C++ Users Group Meetup October 2011 by Olve Maudal

#include <iostream>

template<typename T> void P(T x) { std::cout << x; }

int f(int x) { P(x); return x * 2; }

int main(){ int a = f(1) + f(2) * f(3); P(a);}

#1

Page 14: C++ Pub Quiz - Programvareverkstedetoma/PubQuiz_CPP_Oct2011.pdf · C++ Pub Quiz A 90 minute quiz session Oslo C++ Users Group Meetup October 2011 by Olve Maudal

#include <iostream>

template<typename T> void P(T x) { std::cout << x; }

int main() { int a[]{1,2,3,4}; P(0); for (auto x : a) P(x); P(9);}

#2

Page 15: C++ Pub Quiz - Programvareverkstedetoma/PubQuiz_CPP_Oct2011.pdf · C++ Pub Quiz A 90 minute quiz session Oslo C++ Users Group Meetup October 2011 by Olve Maudal

#include <iostream>

template<typename T> void P(T x) { std::cout << x; }

struct Y { Y(int) { P(0); } Y(Y &) { P(1); } Y() { P(2); } ~Y() { P(3); } void operator=(const Y &) { P(4); }};

struct X { Y v; X(int val) { P(5); v = val; P(6); } ~X() { P(7); }};

int main(){ P(8); X(9); P('a');}

#3

Page 16: C++ Pub Quiz - Programvareverkstedetoma/PubQuiz_CPP_Oct2011.pdf · C++ Pub Quiz A 90 minute quiz session Oslo C++ Users Group Meetup October 2011 by Olve Maudal

#include <iostream>

template<typename T> void P(T x) { std::cout << x; }

struct X { int v; X(int val) : v(val) { P(v); } ~X() { P(v); }};

int main(){ P(0); X a(1); X b(2); X c(3); P(4);}

#4

Page 17: C++ Pub Quiz - Programvareverkstedetoma/PubQuiz_CPP_Oct2011.pdf · C++ Pub Quiz A 90 minute quiz session Oslo C++ Users Group Meetup October 2011 by Olve Maudal

#include <iostream>

template<typename T> void P(T x) { std::cout << x; }

struct X { int v; X(int val) : v(val) { P(v); } ~X() { P(v); }};

static X a(1);X b(2);

int main(){ X e(5); static X f(6);}

#5

Page 18: C++ Pub Quiz - Programvareverkstedetoma/PubQuiz_CPP_Oct2011.pdf · C++ Pub Quiz A 90 minute quiz session Oslo C++ Users Group Meetup October 2011 by Olve Maudal

#include <iostream>

int main(){ char a[] = "Foo"; char * b = "Bar";

std::cout << a << " " << b << std::endl;

a[0] = 'Z'; std::cout << a << " " << b << std::endl;

b[0] = 'C'; std::cout << a << " " << b << std::endl;}

#6

Page 19: C++ Pub Quiz - Programvareverkstedetoma/PubQuiz_CPP_Oct2011.pdf · C++ Pub Quiz A 90 minute quiz session Oslo C++ Users Group Meetup October 2011 by Olve Maudal

#include <iostream>

template<typename T> void P(T x) { std::cout << x; }

int f(int x) { P(x); return x; }

void g(int a, int b) { P(a); P(b); }

int main(){ int a = f(1) + f(2) * f(3); P(a); P('\n');

g(f(1),f(2)); P('\n'); int v[4] = {}; int i=2; v[i] = i++; v[i] = i++; for (int j : v) P(j);

}

#7

Page 20: C++ Pub Quiz - Programvareverkstedetoma/PubQuiz_CPP_Oct2011.pdf · C++ Pub Quiz A 90 minute quiz session Oslo C++ Users Group Meetup October 2011 by Olve Maudal

#include <iostream>

template<typename T> void P(T x) { std::cout << x; }

class X { int value;public: X() : value(42) { P('a'); } ~X() { P('b'); } X(const X & f) : value(f.value) { P('c'); } X & operator=(const X & f) { P('d'); value = f.value; return *this; } X operator++(int) { P('e'); X old(*this); ++*this; return old;} X & operator++() { P('f'); value += 4; return *this; }};

int main() { X f1; P('-'); ++f1; P('-'); f1++; P('-'); X f2 = f1; P('-'); f2 = f1; P('-');}

#8

Page 21: C++ Pub Quiz - Programvareverkstedetoma/PubQuiz_CPP_Oct2011.pdf · C++ Pub Quiz A 90 minute quiz session Oslo C++ Users Group Meetup October 2011 by Olve Maudal

#include <iostream>#include <string>

template<typename T> void P(T x) { std::cout << x; }

void f(double) { P(1); }void f(float) { P(2); }void f(std::string) { P(3); }void f(const std::string &) { P(4); }void f(const char *) { P(5); }void f(char *) { P(6); }

int main() { f(1.9); f("hello");}

#9

Page 22: C++ Pub Quiz - Programvareverkstedetoma/PubQuiz_CPP_Oct2011.pdf · C++ Pub Quiz A 90 minute quiz session Oslo C++ Users Group Meetup October 2011 by Olve Maudal

#include <iostream>#include <string>

template<typename T> void P(T x) { std::cout << x; }

#define MAX(a,b) a > b ? a : b#define MIN(a,b) (((a)<(b))?(a):(b))

int main() { int a=2, b=3, c=0; c = 1 + MAX(a,b); P(a); P(b); P(c); P('-'); c = MIN(++a,++b); P(a); P(b); P(c); P('-'); c = MIN(++a,++b); P(a); P(b); P(c); P('-');}

#10

Page 23: C++ Pub Quiz - Programvareverkstedetoma/PubQuiz_CPP_Oct2011.pdf · C++ Pub Quiz A 90 minute quiz session Oslo C++ Users Group Meetup October 2011 by Olve Maudal

#include <iostream>

template<typename T> void P(T x) { std::cout << x; }

struct A { A() { P('A'); } ~A() { P('a'); }};

struct B { B() { P('B'); } ~B() { P('b'); }};

struct C { A a; B b; C() : b(), a() {} C(int) {}};

int main() { C c1; C c2(4);}

#11

Page 24: C++ Pub Quiz - Programvareverkstedetoma/PubQuiz_CPP_Oct2011.pdf · C++ Pub Quiz A 90 minute quiz session Oslo C++ Users Group Meetup October 2011 by Olve Maudal

#include <iostream>

template<typename T> void P(T x) { std::cout << x; }

struct X { int value; X(int v) : value(v) { P('X'); P(v); } ~X() { P('x'); } X(const X & x) : value(x.value) { P(2); } X operator+(const X & x) { P(3); return this->value + x.value; }};

int main() { X a(4); P('-'); P( (a + a).value ); P('-'); X b = (a + a); P('-'); P(b.value); P('-');}

#12

Page 25: C++ Pub Quiz - Programvareverkstedetoma/PubQuiz_CPP_Oct2011.pdf · C++ Pub Quiz A 90 minute quiz session Oslo C++ Users Group Meetup October 2011 by Olve Maudal

#include <iostream>

template<typename T> void P(T x) { std::cout << x; }

struct X { X(char v) { P('X'); P(v); } ~X() { P('x'); }};

void foo(X x) { P('F');}

int main() { foo(65);}

#13

Page 26: C++ Pub Quiz - Programvareverkstedetoma/PubQuiz_CPP_Oct2011.pdf · C++ Pub Quiz A 90 minute quiz session Oslo C++ Users Group Meetup October 2011 by Olve Maudal

#include <iostream>

template<typename T> void P(T x) { std::cout << x; }

struct A { A() { P(0); } ~A() { P(1); }};

struct B : A { B() { P(2); } ~B() { P(3); }};

struct C { C() { P(4); } virtual ~C() { P(5); }};

struct D : C { D() { P(6); } ~D() { P(7); }};

int main() { A * a = new B; delete a; P('-'); C * c = new D; delete c;}

#14

Page 27: C++ Pub Quiz - Programvareverkstedetoma/PubQuiz_CPP_Oct2011.pdf · C++ Pub Quiz A 90 minute quiz session Oslo C++ Users Group Meetup October 2011 by Olve Maudal

#include <iostream>

template<typename T> void P(T x) { std::cout << x; }

struct A { A() { P(0); }};

struct B : A { B() { P(2); }};

struct C : virtual A { C() { P(4); }};

struct D : B, C { D() { P(6); }};

struct E : C, B{ E() { P(8); }};

int main() { D d; P('-'); E e;}

#15

Page 28: C++ Pub Quiz - Programvareverkstedetoma/PubQuiz_CPP_Oct2011.pdf · C++ Pub Quiz A 90 minute quiz session Oslo C++ Users Group Meetup October 2011 by Olve Maudal

#include <iostream>

template<typename T> void P(T x) { std::cout << x; }

struct X { X() { P('0'); } ~X() { P(1); } };

int main() { try { P(5); throw X(); P(6); } catch (X e) { P(7); } P(8);}

#16

Page 29: C++ Pub Quiz - Programvareverkstedetoma/PubQuiz_CPP_Oct2011.pdf · C++ Pub Quiz A 90 minute quiz session Oslo C++ Users Group Meetup October 2011 by Olve Maudal

#include <iostream>

struct A { int x; char y; int z;};

struct B : A { void foo() {}};

struct C : A { virtual void foo() {}};

struct D : A { virtual void foo() {} virtual void bar() {}}; int main() { std::cout << sizeof(A) << std::endl; std::cout << sizeof(B) << std::endl; std::cout << sizeof(C) << std::endl; std::cout << sizeof(D) << std::endl;}

#17

Page 30: C++ Pub Quiz - Programvareverkstedetoma/PubQuiz_CPP_Oct2011.pdf · C++ Pub Quiz A 90 minute quiz session Oslo C++ Users Group Meetup October 2011 by Olve Maudal

#include <iostream>

template<typename T> void P(T x) { std::cout << x; }

void foo(std::initializer_list<int> numbers, void (*func)(int)){ for (int n : numbers) func(n);}

int main(){ foo({1,2,3,4},[](int x){P(x+2);}); P('-'); auto f = [](){P('f'); return 0;}; auto g = [](){P('g'); return 1;}; auto h = [](char c){P(c); return 2;}('h'); auto j = f() && g(); P(j);}

#18

Page 31: C++ Pub Quiz - Programvareverkstedetoma/PubQuiz_CPP_Oct2011.pdf · C++ Pub Quiz A 90 minute quiz session Oslo C++ Users Group Meetup October 2011 by Olve Maudal

#include <iostream>

template<typename T> void P(T x) { std::cout << x; }

int j = 3;

int main(){ P(j); [&](){j++; P(j);}(); P(j); [=](){j++; P(j);}(); P(j);}

#19

Page 32: C++ Pub Quiz - Programvareverkstedetoma/PubQuiz_CPP_Oct2011.pdf · C++ Pub Quiz A 90 minute quiz session Oslo C++ Users Group Meetup October 2011 by Olve Maudal

#include <iostream>

template<typename T> void P(T x) { std::cout << x; }template<typename T> void foo(T *) { P(2); }template<typename T> void foo(T &&) { P(4); }template<> void foo(int&) { P(5); }

int main(){ int a = 65; foo(a); foo(&a); char b = 'a'; foo(b); foo(&b);}

#20

Page 33: C++ Pub Quiz - Programvareverkstedetoma/PubQuiz_CPP_Oct2011.pdf · C++ Pub Quiz A 90 minute quiz session Oslo C++ Users Group Meetup October 2011 by Olve Maudal

Answers

Page 34: C++ Pub Quiz - Programvareverkstedetoma/PubQuiz_CPP_Oct2011.pdf · C++ Pub Quiz A 90 minute quiz session Oslo C++ Users Group Meetup October 2011 by Olve Maudal

3 points for correct answer1 point if only a minor mistake

0 point if the answer is not correct

For some of the answers there are bonus points.

Page 35: C++ Pub Quiz - Programvareverkstedetoma/PubQuiz_CPP_Oct2011.pdf · C++ Pub Quiz A 90 minute quiz session Oslo C++ Users Group Meetup October 2011 by Olve Maudal
Page 36: C++ Pub Quiz - Programvareverkstedetoma/PubQuiz_CPP_Oct2011.pdf · C++ Pub Quiz A 90 minute quiz session Oslo C++ Users Group Meetup October 2011 by Olve Maudal

Bonus point if you think you might get less than 100% score on this quiz.

Page 37: C++ Pub Quiz - Programvareverkstedetoma/PubQuiz_CPP_Oct2011.pdf · C++ Pub Quiz A 90 minute quiz session Oslo C++ Users Group Meetup October 2011 by Olve Maudal

#include <iostream>

template<typename T> void P(T x) { std::cout << x; }

int f(int x) { P(x); return x * 2; }

int main(){ int a = f(1) + f(2) * f(3); P(a);}

#1

Page 38: C++ Pub Quiz - Programvareverkstedetoma/PubQuiz_CPP_Oct2011.pdf · C++ Pub Quiz A 90 minute quiz session Oslo C++ Users Group Meetup October 2011 by Olve Maudal

#include <iostream>

template<typename T> void P(T x) { std::cout << x; }

int f(int x) { P(x); return x * 2; }

int main(){ int a = f(1) + f(2) * f(3); P(a);}

$ g++ --std=c++0x -O -Wall foo.cpp && ./a.out

#1

Page 39: C++ Pub Quiz - Programvareverkstedetoma/PubQuiz_CPP_Oct2011.pdf · C++ Pub Quiz A 90 minute quiz session Oslo C++ Users Group Meetup October 2011 by Olve Maudal

#include <iostream>

template<typename T> void P(T x) { std::cout << x; }

int f(int x) { P(x); return x * 2; }

int main(){ int a = f(1) + f(2) * f(3); P(a);}

$ g++ --std=c++0x -O -Wall foo.cpp && ./a.out12326

#1

Page 40: C++ Pub Quiz - Programvareverkstedetoma/PubQuiz_CPP_Oct2011.pdf · C++ Pub Quiz A 90 minute quiz session Oslo C++ Users Group Meetup October 2011 by Olve Maudal

#include <iostream>

template<typename T> void P(T x) { std::cout << x; }

int f(int x) { P(x); return x * 2; }

int main(){ int a = f(1) + f(2) * f(3); P(a);}

$ g++ --std=c++0x -O -Wall foo.cpp && ./a.out12326

#1

Bonus point if you discussed evaluation order

Page 41: C++ Pub Quiz - Programvareverkstedetoma/PubQuiz_CPP_Oct2011.pdf · C++ Pub Quiz A 90 minute quiz session Oslo C++ Users Group Meetup October 2011 by Olve Maudal

#include <iostream>

template<typename T> void P(T x) { std::cout << x; }

int main() { int a[]{1,2,3,4}; P(0); for (auto x : a) P(x); P(9);}

#2

Page 42: C++ Pub Quiz - Programvareverkstedetoma/PubQuiz_CPP_Oct2011.pdf · C++ Pub Quiz A 90 minute quiz session Oslo C++ Users Group Meetup October 2011 by Olve Maudal

#include <iostream>

template<typename T> void P(T x) { std::cout << x; }

int main() { int a[]{1,2,3,4}; P(0); for (auto x : a) P(x); P(9);}

$ g++ --std=c++0x -Wall -O foo.cpp && ./a.out

#2

Page 43: C++ Pub Quiz - Programvareverkstedetoma/PubQuiz_CPP_Oct2011.pdf · C++ Pub Quiz A 90 minute quiz session Oslo C++ Users Group Meetup October 2011 by Olve Maudal

#include <iostream>

template<typename T> void P(T x) { std::cout << x; }

int main() { int a[]{1,2,3,4}; P(0); for (auto x : a) P(x); P(9);}

$ g++ --std=c++0x -Wall -O foo.cpp && ./a.out012349

#2

Page 44: C++ Pub Quiz - Programvareverkstedetoma/PubQuiz_CPP_Oct2011.pdf · C++ Pub Quiz A 90 minute quiz session Oslo C++ Users Group Meetup October 2011 by Olve Maudal

#include <iostream>

template<typename T> void P(T x) { std::cout << x; }

struct Y { Y(int) { P(0); } Y(Y &) { P(1); } Y() { P(2); } ~Y() { P(3); } void operator=(const Y &) { P(4); }};

struct X { Y v; X(int val) { P(5); v = val; P(6); } ~X() { P(7); }};

int main(){ P(8); X(9); P('a');}

#3

Page 45: C++ Pub Quiz - Programvareverkstedetoma/PubQuiz_CPP_Oct2011.pdf · C++ Pub Quiz A 90 minute quiz session Oslo C++ Users Group Meetup October 2011 by Olve Maudal

#include <iostream>

template<typename T> void P(T x) { std::cout << x; }

struct Y { Y(int) { P(0); } Y(Y &) { P(1); } Y() { P(2); } ~Y() { P(3); } void operator=(const Y &) { P(4); }};

struct X { Y v; X(int val) { P(5); v = val; P(6); } ~X() { P(7); }};

int main(){ P(8); X(9); P('a');}

$ g++ --std=c++0x -O -Wall foo.cpp && ./a.out

#3

Page 46: C++ Pub Quiz - Programvareverkstedetoma/PubQuiz_CPP_Oct2011.pdf · C++ Pub Quiz A 90 minute quiz session Oslo C++ Users Group Meetup October 2011 by Olve Maudal

#include <iostream>

template<typename T> void P(T x) { std::cout << x; }

struct Y { Y(int) { P(0); } Y(Y &) { P(1); } Y() { P(2); } ~Y() { P(3); } void operator=(const Y &) { P(4); }};

struct X { Y v; X(int val) { P(5); v = val; P(6); } ~X() { P(7); }};

int main(){ P(8); X(9); P('a');}

$ g++ --std=c++0x -O -Wall foo.cpp && ./a.out825043673a

#3

Page 47: C++ Pub Quiz - Programvareverkstedetoma/PubQuiz_CPP_Oct2011.pdf · C++ Pub Quiz A 90 minute quiz session Oslo C++ Users Group Meetup October 2011 by Olve Maudal

#include <iostream>

template<typename T> void P(T x) { std::cout << x; }

struct Y { Y(int) { P(0); } Y(Y &) { P(1); } Y() { P(2); } ~Y() { P(3); } void operator=(const Y &) { P(4); }};

struct X { Y v; X(int val) { P(5); v = val; P(6); } ~X() { P(7); }};

int main(){ P(8); X(9); P('a');}

$ g++ --std=c++0x -O -Wall foo.cpp && ./a.out825043673a

#3

Bonus point if you discussed the strange signature of the assignment

operator

Page 48: C++ Pub Quiz - Programvareverkstedetoma/PubQuiz_CPP_Oct2011.pdf · C++ Pub Quiz A 90 minute quiz session Oslo C++ Users Group Meetup October 2011 by Olve Maudal

#include <iostream>

template<typename T> void P(T x) { std::cout << x; }

struct X { int v; X(int val) : v(val) { P(v); } ~X() { P(v); }};

int main(){ P(0); X a(1); X b(2); X c(3); P(4);}

#4

Page 49: C++ Pub Quiz - Programvareverkstedetoma/PubQuiz_CPP_Oct2011.pdf · C++ Pub Quiz A 90 minute quiz session Oslo C++ Users Group Meetup October 2011 by Olve Maudal

#include <iostream>

template<typename T> void P(T x) { std::cout << x; }

struct X { int v; X(int val) : v(val) { P(v); } ~X() { P(v); }};

int main(){ P(0); X a(1); X b(2); X c(3); P(4);}

$ g++ --std=c++0x -O -Wall foo.cpp && ./a.out

#4

Page 50: C++ Pub Quiz - Programvareverkstedetoma/PubQuiz_CPP_Oct2011.pdf · C++ Pub Quiz A 90 minute quiz session Oslo C++ Users Group Meetup October 2011 by Olve Maudal

#include <iostream>

template<typename T> void P(T x) { std::cout << x; }

struct X { int v; X(int val) : v(val) { P(v); } ~X() { P(v); }};

int main(){ P(0); X a(1); X b(2); X c(3); P(4);}

$ g++ --std=c++0x -O -Wall foo.cpp && ./a.out01234321

#4

Page 51: C++ Pub Quiz - Programvareverkstedetoma/PubQuiz_CPP_Oct2011.pdf · C++ Pub Quiz A 90 minute quiz session Oslo C++ Users Group Meetup October 2011 by Olve Maudal

#include <iostream>

template<typename T> void P(T x) { std::cout << x; }

struct X { int v; X(int val) : v(val) { P(v); } ~X() { P(v); }};

static X a(1);X b(2);

int main(){ X e(5); static X f(6);}

#5

Page 52: C++ Pub Quiz - Programvareverkstedetoma/PubQuiz_CPP_Oct2011.pdf · C++ Pub Quiz A 90 minute quiz session Oslo C++ Users Group Meetup October 2011 by Olve Maudal

#include <iostream>

template<typename T> void P(T x) { std::cout << x; }

struct X { int v; X(int val) : v(val) { P(v); } ~X() { P(v); }};

static X a(1);X b(2);

int main(){ X e(5); static X f(6);}

$ g++ --std=c++0x -O -Wall foo.cpp && ./a.out

#5

Page 53: C++ Pub Quiz - Programvareverkstedetoma/PubQuiz_CPP_Oct2011.pdf · C++ Pub Quiz A 90 minute quiz session Oslo C++ Users Group Meetup October 2011 by Olve Maudal

#include <iostream>

template<typename T> void P(T x) { std::cout << x; }

struct X { int v; X(int val) : v(val) { P(v); } ~X() { P(v); }};

static X a(1);X b(2);

int main(){ X e(5); static X f(6);}

$ g++ --std=c++0x -O -Wall foo.cpp && ./a.out12565621

#5

Page 54: C++ Pub Quiz - Programvareverkstedetoma/PubQuiz_CPP_Oct2011.pdf · C++ Pub Quiz A 90 minute quiz session Oslo C++ Users Group Meetup October 2011 by Olve Maudal

#include <iostream>

int main(){ char a[] = "Foo"; char * b = "Bar";

std::cout << a << " " << b << std::endl;

a[0] = 'Z'; std::cout << a << " " << b << std::endl;

b[0] = 'C'; std::cout << a << " " << b << std::endl;}

#6

Page 55: C++ Pub Quiz - Programvareverkstedetoma/PubQuiz_CPP_Oct2011.pdf · C++ Pub Quiz A 90 minute quiz session Oslo C++ Users Group Meetup October 2011 by Olve Maudal

#include <iostream>

int main(){ char a[] = "Foo"; char * b = "Bar";

std::cout << a << " " << b << std::endl;

a[0] = 'Z'; std::cout << a << " " << b << std::endl;

b[0] = 'C'; std::cout << a << " " << b << std::endl;}

$ g++ --std=c++0x -O -Wall foo.cpp && ./a.out

#6

Page 56: C++ Pub Quiz - Programvareverkstedetoma/PubQuiz_CPP_Oct2011.pdf · C++ Pub Quiz A 90 minute quiz session Oslo C++ Users Group Meetup October 2011 by Olve Maudal

#include <iostream>

int main(){ char a[] = "Foo"; char * b = "Bar";

std::cout << a << " " << b << std::endl;

a[0] = 'Z'; std::cout << a << " " << b << std::endl;

b[0] = 'C'; std::cout << a << " " << b << std::endl;}

$ g++ --std=c++0x -O -Wall foo.cpp && ./a.outfoo.cpp:6:16: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]

#6

Page 57: C++ Pub Quiz - Programvareverkstedetoma/PubQuiz_CPP_Oct2011.pdf · C++ Pub Quiz A 90 minute quiz session Oslo C++ Users Group Meetup October 2011 by Olve Maudal

#include <iostream>

int main(){ char a[] = "Foo"; char * b = "Bar";

std::cout << a << " " << b << std::endl;

a[0] = 'Z'; std::cout << a << " " << b << std::endl;

b[0] = 'C'; std::cout << a << " " << b << std::endl;}

$ g++ --std=c++0x -O -Wall foo.cpp && ./a.outfoo.cpp:6:16: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]Foo Bar

#6

Page 58: C++ Pub Quiz - Programvareverkstedetoma/PubQuiz_CPP_Oct2011.pdf · C++ Pub Quiz A 90 minute quiz session Oslo C++ Users Group Meetup October 2011 by Olve Maudal

#include <iostream>

int main(){ char a[] = "Foo"; char * b = "Bar";

std::cout << a << " " << b << std::endl;

a[0] = 'Z'; std::cout << a << " " << b << std::endl;

b[0] = 'C'; std::cout << a << " " << b << std::endl;}

$ g++ --std=c++0x -O -Wall foo.cpp && ./a.outfoo.cpp:6:16: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]Foo BarZoo Bar

#6

Page 59: C++ Pub Quiz - Programvareverkstedetoma/PubQuiz_CPP_Oct2011.pdf · C++ Pub Quiz A 90 minute quiz session Oslo C++ Users Group Meetup October 2011 by Olve Maudal

#include <iostream>

int main(){ char a[] = "Foo"; char * b = "Bar";

std::cout << a << " " << b << std::endl;

a[0] = 'Z'; std::cout << a << " " << b << std::endl;

b[0] = 'C'; std::cout << a << " " << b << std::endl;}

$ g++ --std=c++0x -O -Wall foo.cpp && ./a.outfoo.cpp:6:16: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]Foo BarZoo Bar/bin/bash: line 1: 16973 Segmentation fault ./a.out

#6

Page 60: C++ Pub Quiz - Programvareverkstedetoma/PubQuiz_CPP_Oct2011.pdf · C++ Pub Quiz A 90 minute quiz session Oslo C++ Users Group Meetup October 2011 by Olve Maudal

#include <iostream>

int main(){ char a[] = "Foo"; char * b = "Bar";

std::cout << a << " " << b << std::endl;

a[0] = 'Z'; std::cout << a << " " << b << std::endl;

b[0] = 'C'; std::cout << a << " " << b << std::endl;}

$ g++ --std=c++0x -O -Wall foo.cpp && ./a.outfoo.cpp:6:16: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]Foo BarZoo Bar/bin/bash: line 1: 16973 Segmentation fault ./a.out

#6

Bonus point if you discussed the deprecated string conversion

Page 61: C++ Pub Quiz - Programvareverkstedetoma/PubQuiz_CPP_Oct2011.pdf · C++ Pub Quiz A 90 minute quiz session Oslo C++ Users Group Meetup October 2011 by Olve Maudal

#include <iostream>

template<typename T> void P(T x) { std::cout << x; }

int f(int x) { P(x); return x; }

void g(int a, int b) { P(a); P(b); }

int main(){ int a = f(1) + f(2) * f(3); P(a); P('\n');

g(f(1),f(2)); P('\n'); int v[4] = {}; int i=2; v[i] = i++; v[i] = i++; for (int j : v) P(j);

}

#7

Page 62: C++ Pub Quiz - Programvareverkstedetoma/PubQuiz_CPP_Oct2011.pdf · C++ Pub Quiz A 90 minute quiz session Oslo C++ Users Group Meetup October 2011 by Olve Maudal

#include <iostream>

template<typename T> void P(T x) { std::cout << x; }

int f(int x) { P(x); return x; }

void g(int a, int b) { P(a); P(b); }

int main(){ int a = f(1) + f(2) * f(3); P(a); P('\n');

g(f(1),f(2)); P('\n'); int v[4] = {}; int i=2; v[i] = i++; v[i] = i++; for (int j : v) P(j);

}

$ g++ --std=c++0x -O -Wall foo.cpp && ./a.out

#7

Page 63: C++ Pub Quiz - Programvareverkstedetoma/PubQuiz_CPP_Oct2011.pdf · C++ Pub Quiz A 90 minute quiz session Oslo C++ Users Group Meetup October 2011 by Olve Maudal

#include <iostream>

template<typename T> void P(T x) { std::cout << x; }

int f(int x) { P(x); return x; }

void g(int a, int b) { P(a); P(b); }

int main(){ int a = f(1) + f(2) * f(3); P(a); P('\n');

g(f(1),f(2)); P('\n'); int v[4] = {}; int i=2; v[i] = i++; v[i] = i++; for (int j : v) P(j);

}

$ g++ --std=c++0x -O -Wall foo.cpp && ./a.outfoo.cpp: In function ‘int main()’:

#7

Page 64: C++ Pub Quiz - Programvareverkstedetoma/PubQuiz_CPP_Oct2011.pdf · C++ Pub Quiz A 90 minute quiz session Oslo C++ Users Group Meetup October 2011 by Olve Maudal

#include <iostream>

template<typename T> void P(T x) { std::cout << x; }

int f(int x) { P(x); return x; }

void g(int a, int b) { P(a); P(b); }

int main(){ int a = f(1) + f(2) * f(3); P(a); P('\n');

g(f(1),f(2)); P('\n'); int v[4] = {}; int i=2; v[i] = i++; v[i] = i++; for (int j : v) P(j);

}

$ g++ --std=c++0x -O -Wall foo.cpp && ./a.outfoo.cpp: In function ‘int main()’:foo.cpp:20:15: warning: operation on ‘i’ may be undefined [-Wsequence-point]

#7

Page 65: C++ Pub Quiz - Programvareverkstedetoma/PubQuiz_CPP_Oct2011.pdf · C++ Pub Quiz A 90 minute quiz session Oslo C++ Users Group Meetup October 2011 by Olve Maudal

#include <iostream>

template<typename T> void P(T x) { std::cout << x; }

int f(int x) { P(x); return x; }

void g(int a, int b) { P(a); P(b); }

int main(){ int a = f(1) + f(2) * f(3); P(a); P('\n');

g(f(1),f(2)); P('\n'); int v[4] = {}; int i=2; v[i] = i++; v[i] = i++; for (int j : v) P(j);

}

$ g++ --std=c++0x -O -Wall foo.cpp && ./a.outfoo.cpp: In function ‘int main()’:foo.cpp:20:15: warning: operation on ‘i’ may be undefined [-Wsequence-point]foo.cpp:21:15: warning: operation on ‘i’ may be undefined [-Wsequence-point]

#7

Page 66: C++ Pub Quiz - Programvareverkstedetoma/PubQuiz_CPP_Oct2011.pdf · C++ Pub Quiz A 90 minute quiz session Oslo C++ Users Group Meetup October 2011 by Olve Maudal

#include <iostream>

template<typename T> void P(T x) { std::cout << x; }

int f(int x) { P(x); return x; }

void g(int a, int b) { P(a); P(b); }

int main(){ int a = f(1) + f(2) * f(3); P(a); P('\n');

g(f(1),f(2)); P('\n'); int v[4] = {}; int i=2; v[i] = i++; v[i] = i++; for (int j : v) P(j);

}

$ g++ --std=c++0x -O -Wall foo.cpp && ./a.outfoo.cpp: In function ‘int main()’:foo.cpp:20:15: warning: operation on ‘i’ may be undefined [-Wsequence-point]foo.cpp:21:15: warning: operation on ‘i’ may be undefined [-Wsequence-point]1237

#7

Page 67: C++ Pub Quiz - Programvareverkstedetoma/PubQuiz_CPP_Oct2011.pdf · C++ Pub Quiz A 90 minute quiz session Oslo C++ Users Group Meetup October 2011 by Olve Maudal

#include <iostream>

template<typename T> void P(T x) { std::cout << x; }

int f(int x) { P(x); return x; }

void g(int a, int b) { P(a); P(b); }

int main(){ int a = f(1) + f(2) * f(3); P(a); P('\n');

g(f(1),f(2)); P('\n'); int v[4] = {}; int i=2; v[i] = i++; v[i] = i++; for (int j : v) P(j);

}

$ g++ --std=c++0x -O -Wall foo.cpp && ./a.outfoo.cpp: In function ‘int main()’:foo.cpp:20:15: warning: operation on ‘i’ may be undefined [-Wsequence-point]foo.cpp:21:15: warning: operation on ‘i’ may be undefined [-Wsequence-point]12372112

#7

Page 68: C++ Pub Quiz - Programvareverkstedetoma/PubQuiz_CPP_Oct2011.pdf · C++ Pub Quiz A 90 minute quiz session Oslo C++ Users Group Meetup October 2011 by Olve Maudal

#include <iostream>

template<typename T> void P(T x) { std::cout << x; }

int f(int x) { P(x); return x; }

void g(int a, int b) { P(a); P(b); }

int main(){ int a = f(1) + f(2) * f(3); P(a); P('\n');

g(f(1),f(2)); P('\n'); int v[4] = {}; int i=2; v[i] = i++; v[i] = i++; for (int j : v) P(j);

}

$ g++ --std=c++0x -O -Wall foo.cpp && ./a.outfoo.cpp: In function ‘int main()’:foo.cpp:20:15: warning: operation on ‘i’ may be undefined [-Wsequence-point]foo.cpp:21:15: warning: operation on ‘i’ may be undefined [-Wsequence-point]123721120023

#7

Page 69: C++ Pub Quiz - Programvareverkstedetoma/PubQuiz_CPP_Oct2011.pdf · C++ Pub Quiz A 90 minute quiz session Oslo C++ Users Group Meetup October 2011 by Olve Maudal

#include <iostream>

template<typename T> void P(T x) { std::cout << x; }

int f(int x) { P(x); return x; }

void g(int a, int b) { P(a); P(b); }

int main(){ int a = f(1) + f(2) * f(3); P(a); P('\n');

g(f(1),f(2)); P('\n'); int v[4] = {}; int i=2; v[i] = i++; v[i] = i++; for (int j : v) P(j);

}

$ g++ --std=c++0x -O -Wall foo.cpp && ./a.outfoo.cpp: In function ‘int main()’:foo.cpp:20:15: warning: operation on ‘i’ may be undefined [-Wsequence-point]foo.cpp:21:15: warning: operation on ‘i’ may be undefined [-Wsequence-point]123721120023

#7

Bonus point if you discussed sequence points

Another bonus point if you discussed unspecified behaviour vs

undefined behaviour

Page 70: C++ Pub Quiz - Programvareverkstedetoma/PubQuiz_CPP_Oct2011.pdf · C++ Pub Quiz A 90 minute quiz session Oslo C++ Users Group Meetup October 2011 by Olve Maudal

#include <iostream>

template<typename T> void P(T x) { std::cout << x; }

class X { int value;public: X() : value(42) { P('a'); } ~X() { P('b'); } X(const X & f) : value(f.value) { P('c'); } X & operator=(const X & f) { P('d'); value = f.value; return *this; } X operator++(int) { P('e'); X old(*this); ++*this; return old;} X & operator++() { P('f'); value += 4; return *this; }};

int main() { X f1; P('-'); ++f1; P('-'); f1++; P('-'); X f2 = f1; P('-'); f2 = f1; P('-');}

#8

Page 71: C++ Pub Quiz - Programvareverkstedetoma/PubQuiz_CPP_Oct2011.pdf · C++ Pub Quiz A 90 minute quiz session Oslo C++ Users Group Meetup October 2011 by Olve Maudal

#include <iostream>

template<typename T> void P(T x) { std::cout << x; }

class X { int value;public: X() : value(42) { P('a'); } ~X() { P('b'); } X(const X & f) : value(f.value) { P('c'); } X & operator=(const X & f) { P('d'); value = f.value; return *this; } X operator++(int) { P('e'); X old(*this); ++*this; return old;} X & operator++() { P('f'); value += 4; return *this; }};

int main() { X f1; P('-'); ++f1; P('-'); f1++; P('-'); X f2 = f1; P('-'); f2 = f1; P('-');}

$ g++ --std=c++0x -O -Wall foo.cpp && ./a.out

#8

Page 72: C++ Pub Quiz - Programvareverkstedetoma/PubQuiz_CPP_Oct2011.pdf · C++ Pub Quiz A 90 minute quiz session Oslo C++ Users Group Meetup October 2011 by Olve Maudal

#include <iostream>

template<typename T> void P(T x) { std::cout << x; }

class X { int value;public: X() : value(42) { P('a'); } ~X() { P('b'); } X(const X & f) : value(f.value) { P('c'); } X & operator=(const X & f) { P('d'); value = f.value; return *this; } X operator++(int) { P('e'); X old(*this); ++*this; return old;} X & operator++() { P('f'); value += 4; return *this; }};

int main() { X f1; P('-'); ++f1; P('-'); f1++; P('-'); X f2 = f1; P('-'); f2 = f1; P('-');}

$ g++ --std=c++0x -O -Wall foo.cpp && ./a.outa-f-ecfb-c-d-bb

#8

Page 73: C++ Pub Quiz - Programvareverkstedetoma/PubQuiz_CPP_Oct2011.pdf · C++ Pub Quiz A 90 minute quiz session Oslo C++ Users Group Meetup October 2011 by Olve Maudal

#include <iostream>

template<typename T> void P(T x) { std::cout << x; }

class X { int value;public: X() : value(42) { P('a'); } ~X() { P('b'); } X(const X & f) : value(f.value) { P('c'); } X & operator=(const X & f) { P('d'); value = f.value; return *this; } X operator++(int) { P('e'); X old(*this); ++*this; return old;} X & operator++() { P('f'); value += 4; return *this; }};

int main() { X f1; P('-'); ++f1; P('-'); f1++; P('-'); X f2 = f1; P('-'); f2 = f1; P('-');}

$ g++ --std=c++0x -O -Wall foo.cpp && ./a.outa-f-ecfb-c-d-bb

#8

Bonus point if you discussed return value optimization (RVO)

Page 74: C++ Pub Quiz - Programvareverkstedetoma/PubQuiz_CPP_Oct2011.pdf · C++ Pub Quiz A 90 minute quiz session Oslo C++ Users Group Meetup October 2011 by Olve Maudal

#include <iostream>#include <string>

template<typename T> void P(T x) { std::cout << x; }

void f(double) { P(1); }void f(float) { P(2); }void f(std::string) { P(3); }void f(const std::string &) { P(4); }void f(const char *) { P(5); }void f(char *) { P(6); }

int main() { f(1.9); f("hello");}

#9

Page 75: C++ Pub Quiz - Programvareverkstedetoma/PubQuiz_CPP_Oct2011.pdf · C++ Pub Quiz A 90 minute quiz session Oslo C++ Users Group Meetup October 2011 by Olve Maudal

#include <iostream>#include <string>

template<typename T> void P(T x) { std::cout << x; }

void f(double) { P(1); }void f(float) { P(2); }void f(std::string) { P(3); }void f(const std::string &) { P(4); }void f(const char *) { P(5); }void f(char *) { P(6); }

int main() { f(1.9); f("hello");}

$ g++ --std=c++0x -O -Wall foo.cpp && ./a.out

#9

Page 76: C++ Pub Quiz - Programvareverkstedetoma/PubQuiz_CPP_Oct2011.pdf · C++ Pub Quiz A 90 minute quiz session Oslo C++ Users Group Meetup October 2011 by Olve Maudal

#include <iostream>#include <string>

template<typename T> void P(T x) { std::cout << x; }

void f(double) { P(1); }void f(float) { P(2); }void f(std::string) { P(3); }void f(const std::string &) { P(4); }void f(const char *) { P(5); }void f(char *) { P(6); }

int main() { f(1.9); f("hello");}

$ g++ --std=c++0x -O -Wall foo.cpp && ./a.out15

#9

Page 77: C++ Pub Quiz - Programvareverkstedetoma/PubQuiz_CPP_Oct2011.pdf · C++ Pub Quiz A 90 minute quiz session Oslo C++ Users Group Meetup October 2011 by Olve Maudal

#include <iostream>#include <string>

template<typename T> void P(T x) { std::cout << x; }

#define MAX(a,b) a > b ? a : b#define MIN(a,b) (((a)<(b))?(a):(b))

int main() { int a=2, b=3, c=0; c = 1 + MAX(a,b); P(a); P(b); P(c); P('-'); c = MIN(++a,++b); P(a); P(b); P(c); P('-'); c = MIN(++a,++b); P(a); P(b); P(c); P('-');}

#10

Page 78: C++ Pub Quiz - Programvareverkstedetoma/PubQuiz_CPP_Oct2011.pdf · C++ Pub Quiz A 90 minute quiz session Oslo C++ Users Group Meetup October 2011 by Olve Maudal

#include <iostream>#include <string>

template<typename T> void P(T x) { std::cout << x; }

#define MAX(a,b) a > b ? a : b#define MIN(a,b) (((a)<(b))?(a):(b))

int main() { int a=2, b=3, c=0; c = 1 + MAX(a,b); P(a); P(b); P(c); P('-'); c = MIN(++a,++b); P(a); P(b); P(c); P('-'); c = MIN(++a,++b); P(a); P(b); P(c); P('-');}

$ g++ --std=c++0x -O -Wall foo.cpp && ./a.out

#10

Page 79: C++ Pub Quiz - Programvareverkstedetoma/PubQuiz_CPP_Oct2011.pdf · C++ Pub Quiz A 90 minute quiz session Oslo C++ Users Group Meetup October 2011 by Olve Maudal

#include <iostream>#include <string>

template<typename T> void P(T x) { std::cout << x; }

#define MAX(a,b) a > b ? a : b#define MIN(a,b) (((a)<(b))?(a):(b))

int main() { int a=2, b=3, c=0; c = 1 + MAX(a,b); P(a); P(b); P(c); P('-'); c = MIN(++a,++b); P(a); P(b); P(c); P('-'); c = MIN(++a,++b); P(a); P(b); P(c); P('-');}

$ g++ --std=c++0x -O -Wall foo.cpp && ./a.out233-444-566-

#10

Page 80: C++ Pub Quiz - Programvareverkstedetoma/PubQuiz_CPP_Oct2011.pdf · C++ Pub Quiz A 90 minute quiz session Oslo C++ Users Group Meetup October 2011 by Olve Maudal

#include <iostream>#include <string>

template<typename T> void P(T x) { std::cout << x; }

#define MAX(a,b) a > b ? a : b#define MIN(a,b) (((a)<(b))?(a):(b))

int main() { int a=2, b=3, c=0; c = 1 + MAX(a,b); P(a); P(b); P(c); P('-'); c = MIN(++a,++b); P(a); P(b); P(c); P('-'); c = MIN(++a,++b); P(a); P(b); P(c); P('-');}

$ g++ --std=c++0x -O -Wall foo.cpp && ./a.out233-444-566-

#10

Bonus point if you discussed if the use of MIN macro introduced a

sequence point violation

Page 81: C++ Pub Quiz - Programvareverkstedetoma/PubQuiz_CPP_Oct2011.pdf · C++ Pub Quiz A 90 minute quiz session Oslo C++ Users Group Meetup October 2011 by Olve Maudal

#include <iostream>

template<typename T> void P(T x) { std::cout << x; }

struct A { A() { P('A'); } ~A() { P('a'); }};

struct B { B() { P('B'); } ~B() { P('b'); }};

struct C { A a; B b; C() : b(), a() {} C(int) {}};

int main() { C c1; C c2(4);}

#11

Page 82: C++ Pub Quiz - Programvareverkstedetoma/PubQuiz_CPP_Oct2011.pdf · C++ Pub Quiz A 90 minute quiz session Oslo C++ Users Group Meetup October 2011 by Olve Maudal

#include <iostream>

template<typename T> void P(T x) { std::cout << x; }

struct A { A() { P('A'); } ~A() { P('a'); }};

struct B { B() { P('B'); } ~B() { P('b'); }};

struct C { A a; B b; C() : b(), a() {} C(int) {}};

int main() { C c1; C c2(4);}

$ g++ --std=c++0x -O -Wall foo.cpp && ./a.out

#11

Page 83: C++ Pub Quiz - Programvareverkstedetoma/PubQuiz_CPP_Oct2011.pdf · C++ Pub Quiz A 90 minute quiz session Oslo C++ Users Group Meetup October 2011 by Olve Maudal

#include <iostream>

template<typename T> void P(T x) { std::cout << x; }

struct A { A() { P('A'); } ~A() { P('a'); }};

struct B { B() { P('B'); } ~B() { P('b'); }};

struct C { A a; B b; C() : b(), a() {} C(int) {}};

int main() { C c1; C c2(4);}

$ g++ --std=c++0x -O -Wall foo.cpp && ./a.outfoo.cpp: In constructor ‘C::C()’:

#11

Page 84: C++ Pub Quiz - Programvareverkstedetoma/PubQuiz_CPP_Oct2011.pdf · C++ Pub Quiz A 90 minute quiz session Oslo C++ Users Group Meetup October 2011 by Olve Maudal

#include <iostream>

template<typename T> void P(T x) { std::cout << x; }

struct A { A() { P('A'); } ~A() { P('a'); }};

struct B { B() { P('B'); } ~B() { P('b'); }};

struct C { A a; B b; C() : b(), a() {} C(int) {}};

int main() { C c1; C c2(4);}

$ g++ --std=c++0x -O -Wall foo.cpp && ./a.outfoo.cpp: In constructor ‘C::C()’:foo.cpp:17:7: warning: ‘C::b’ will be initialized after [-Wreorder]

#11

Page 85: C++ Pub Quiz - Programvareverkstedetoma/PubQuiz_CPP_Oct2011.pdf · C++ Pub Quiz A 90 minute quiz session Oslo C++ Users Group Meetup October 2011 by Olve Maudal

#include <iostream>

template<typename T> void P(T x) { std::cout << x; }

struct A { A() { P('A'); } ~A() { P('a'); }};

struct B { B() { P('B'); } ~B() { P('b'); }};

struct C { A a; B b; C() : b(), a() {} C(int) {}};

int main() { C c1; C c2(4);}

$ g++ --std=c++0x -O -Wall foo.cpp && ./a.outfoo.cpp: In constructor ‘C::C()’:foo.cpp:17:7: warning: ‘C::b’ will be initialized after [-Wreorder]foo.cpp:16:7: warning: ‘A C::a’ [-Wreorder]

#11

Page 86: C++ Pub Quiz - Programvareverkstedetoma/PubQuiz_CPP_Oct2011.pdf · C++ Pub Quiz A 90 minute quiz session Oslo C++ Users Group Meetup October 2011 by Olve Maudal

#include <iostream>

template<typename T> void P(T x) { std::cout << x; }

struct A { A() { P('A'); } ~A() { P('a'); }};

struct B { B() { P('B'); } ~B() { P('b'); }};

struct C { A a; B b; C() : b(), a() {} C(int) {}};

int main() { C c1; C c2(4);}

$ g++ --std=c++0x -O -Wall foo.cpp && ./a.outfoo.cpp: In constructor ‘C::C()’:foo.cpp:17:7: warning: ‘C::b’ will be initialized after [-Wreorder]foo.cpp:16:7: warning: ‘A C::a’ [-Wreorder]foo.cpp:18:5: warning: when initialized here [-Wreorder]

#11

Page 87: C++ Pub Quiz - Programvareverkstedetoma/PubQuiz_CPP_Oct2011.pdf · C++ Pub Quiz A 90 minute quiz session Oslo C++ Users Group Meetup October 2011 by Olve Maudal

#include <iostream>

template<typename T> void P(T x) { std::cout << x; }

struct A { A() { P('A'); } ~A() { P('a'); }};

struct B { B() { P('B'); } ~B() { P('b'); }};

struct C { A a; B b; C() : b(), a() {} C(int) {}};

int main() { C c1; C c2(4);}

$ g++ --std=c++0x -O -Wall foo.cpp && ./a.outfoo.cpp: In constructor ‘C::C()’:foo.cpp:17:7: warning: ‘C::b’ will be initialized after [-Wreorder]foo.cpp:16:7: warning: ‘A C::a’ [-Wreorder]foo.cpp:18:5: warning: when initialized here [-Wreorder]ABABbaba

#11

Page 88: C++ Pub Quiz - Programvareverkstedetoma/PubQuiz_CPP_Oct2011.pdf · C++ Pub Quiz A 90 minute quiz session Oslo C++ Users Group Meetup October 2011 by Olve Maudal

#include <iostream>

template<typename T> void P(T x) { std::cout << x; }

struct X { int value; X(int v) : value(v) { P('X'); P(v); } ~X() { P('x'); } X(const X & x) : value(x.value) { P(2); } X operator+(const X & x) { P(3); return this->value + x.value; }};

int main() { X a(4); P('-'); P( (a + a).value ); P('-'); X b = (a + a); P('-'); P(b.value); P('-');}

#12

Page 89: C++ Pub Quiz - Programvareverkstedetoma/PubQuiz_CPP_Oct2011.pdf · C++ Pub Quiz A 90 minute quiz session Oslo C++ Users Group Meetup October 2011 by Olve Maudal

#include <iostream>

template<typename T> void P(T x) { std::cout << x; }

struct X { int value; X(int v) : value(v) { P('X'); P(v); } ~X() { P('x'); } X(const X & x) : value(x.value) { P(2); } X operator+(const X & x) { P(3); return this->value + x.value; }};

int main() { X a(4); P('-'); P( (a + a).value ); P('-'); X b = (a + a); P('-'); P(b.value); P('-');}

$ g++ --std=c++0x -O -Wall foo.cpp && ./a.out

#12

Page 90: C++ Pub Quiz - Programvareverkstedetoma/PubQuiz_CPP_Oct2011.pdf · C++ Pub Quiz A 90 minute quiz session Oslo C++ Users Group Meetup October 2011 by Olve Maudal

#include <iostream>

template<typename T> void P(T x) { std::cout << x; }

struct X { int value; X(int v) : value(v) { P('X'); P(v); } ~X() { P('x'); } X(const X & x) : value(x.value) { P(2); } X operator+(const X & x) { P(3); return this->value + x.value; }};

int main() { X a(4); P('-'); P( (a + a).value ); P('-'); X b = (a + a); P('-'); P(b.value); P('-');}

$ g++ --std=c++0x -O -Wall foo.cpp && ./a.outX4-3X88x-3X8-8-xx

#12

Page 91: C++ Pub Quiz - Programvareverkstedetoma/PubQuiz_CPP_Oct2011.pdf · C++ Pub Quiz A 90 minute quiz session Oslo C++ Users Group Meetup October 2011 by Olve Maudal

#include <iostream>

template<typename T> void P(T x) { std::cout << x; }

struct X { X(char v) { P('X'); P(v); } ~X() { P('x'); }};

void foo(X x) { P('F');}

int main() { foo(65);}

#13

Page 92: C++ Pub Quiz - Programvareverkstedetoma/PubQuiz_CPP_Oct2011.pdf · C++ Pub Quiz A 90 minute quiz session Oslo C++ Users Group Meetup October 2011 by Olve Maudal

#include <iostream>

template<typename T> void P(T x) { std::cout << x; }

struct X { X(char v) { P('X'); P(v); } ~X() { P('x'); }};

void foo(X x) { P('F');}

int main() { foo(65);}

$ g++ --std=c++0x -O -Wall foo.cpp && ./a.out

#13

Page 93: C++ Pub Quiz - Programvareverkstedetoma/PubQuiz_CPP_Oct2011.pdf · C++ Pub Quiz A 90 minute quiz session Oslo C++ Users Group Meetup October 2011 by Olve Maudal

#include <iostream>

template<typename T> void P(T x) { std::cout << x; }

struct X { X(char v) { P('X'); P(v); } ~X() { P('x'); }};

void foo(X x) { P('F');}

int main() { foo(65);}

$ g++ --std=c++0x -O -Wall foo.cpp && ./a.outXAFx

#13

Page 94: C++ Pub Quiz - Programvareverkstedetoma/PubQuiz_CPP_Oct2011.pdf · C++ Pub Quiz A 90 minute quiz session Oslo C++ Users Group Meetup October 2011 by Olve Maudal

#include <iostream>

template<typename T> void P(T x) { std::cout << x; }

struct X { X(char v) { P('X'); P(v); } ~X() { P('x'); }};

void foo(X x) { P('F');}

int main() { foo(65);}

$ g++ --std=c++0x -O -Wall foo.cpp && ./a.outXAFx

#13

Bonus point if you discussed the explicit specifier for constructors

Page 95: C++ Pub Quiz - Programvareverkstedetoma/PubQuiz_CPP_Oct2011.pdf · C++ Pub Quiz A 90 minute quiz session Oslo C++ Users Group Meetup October 2011 by Olve Maudal

#include <iostream>

template<typename T> void P(T x) { std::cout << x; }

struct A { A() { P(0); } ~A() { P(1); }};

struct B : A { B() { P(2); } ~B() { P(3); }};

struct C { C() { P(4); } virtual ~C() { P(5); }};

struct D : C { D() { P(6); } ~D() { P(7); }};

int main() { A * a = new B; delete a; P('-'); C * c = new D; delete c;}

#14

Page 96: C++ Pub Quiz - Programvareverkstedetoma/PubQuiz_CPP_Oct2011.pdf · C++ Pub Quiz A 90 minute quiz session Oslo C++ Users Group Meetup October 2011 by Olve Maudal

#include <iostream>

template<typename T> void P(T x) { std::cout << x; }

struct A { A() { P(0); } ~A() { P(1); }};

struct B : A { B() { P(2); } ~B() { P(3); }};

struct C { C() { P(4); } virtual ~C() { P(5); }};

struct D : C { D() { P(6); } ~D() { P(7); }};

int main() { A * a = new B; delete a; P('-'); C * c = new D; delete c;}

$ g++ --std=c++0x -O -Wall foo.cpp && ./a.out

#14

Page 97: C++ Pub Quiz - Programvareverkstedetoma/PubQuiz_CPP_Oct2011.pdf · C++ Pub Quiz A 90 minute quiz session Oslo C++ Users Group Meetup October 2011 by Olve Maudal

#include <iostream>

template<typename T> void P(T x) { std::cout << x; }

struct A { A() { P(0); } ~A() { P(1); }};

struct B : A { B() { P(2); } ~B() { P(3); }};

struct C { C() { P(4); } virtual ~C() { P(5); }};

struct D : C { D() { P(6); } ~D() { P(7); }};

int main() { A * a = new B; delete a; P('-'); C * c = new D; delete c;}

$ g++ --std=c++0x -O -Wall foo.cpp && ./a.out021-4675

#14

Page 98: C++ Pub Quiz - Programvareverkstedetoma/PubQuiz_CPP_Oct2011.pdf · C++ Pub Quiz A 90 minute quiz session Oslo C++ Users Group Meetup October 2011 by Olve Maudal

#include <iostream>

template<typename T> void P(T x) { std::cout << x; }

struct A { A() { P(0); }};

struct B : A { B() { P(2); }};

struct C : virtual A { C() { P(4); }};

struct D : B, C { D() { P(6); }};

struct E : C, B{ E() { P(8); }};

int main() { D d; P('-'); E e;}

#15

Page 99: C++ Pub Quiz - Programvareverkstedetoma/PubQuiz_CPP_Oct2011.pdf · C++ Pub Quiz A 90 minute quiz session Oslo C++ Users Group Meetup October 2011 by Olve Maudal

#include <iostream>

template<typename T> void P(T x) { std::cout << x; }

struct A { A() { P(0); }};

struct B : A { B() { P(2); }};

struct C : virtual A { C() { P(4); }};

struct D : B, C { D() { P(6); }};

struct E : C, B{ E() { P(8); }};

int main() { D d; P('-'); E e;}

$ g++ --std=c++0x -O -Wall foo.cpp && ./a.out

#15

Page 100: C++ Pub Quiz - Programvareverkstedetoma/PubQuiz_CPP_Oct2011.pdf · C++ Pub Quiz A 90 minute quiz session Oslo C++ Users Group Meetup October 2011 by Olve Maudal

#include <iostream>

template<typename T> void P(T x) { std::cout << x; }

struct A { A() { P(0); }};

struct B : A { B() { P(2); }};

struct C : virtual A { C() { P(4); }};

struct D : B, C { D() { P(6); }};

struct E : C, B{ E() { P(8); }};

int main() { D d; P('-'); E e;}

$ g++ --std=c++0x -O -Wall foo.cpp && ./a.out00246-04028

#15

Page 101: C++ Pub Quiz - Programvareverkstedetoma/PubQuiz_CPP_Oct2011.pdf · C++ Pub Quiz A 90 minute quiz session Oslo C++ Users Group Meetup October 2011 by Olve Maudal

#include <iostream>

template<typename T> void P(T x) { std::cout << x; }

struct A { A() { P(0); }};

struct B : A { B() { P(2); }};

struct C : virtual A { C() { P(4); }};

struct D : B, C { D() { P(6); }};

struct E : C, B{ E() { P(8); }};

int main() { D d; P('-'); E e;}

$ g++ --std=c++0x -O -Wall foo.cpp && ./a.out00246-04028

#15

Bonus point if you have not been using virtual inheritance in production code.

Page 102: C++ Pub Quiz - Programvareverkstedetoma/PubQuiz_CPP_Oct2011.pdf · C++ Pub Quiz A 90 minute quiz session Oslo C++ Users Group Meetup October 2011 by Olve Maudal

#include <iostream>

template<typename T> void P(T x) { std::cout << x; }

struct X { X() { P('0'); } ~X() { P(1); } };

int main() { try { P(5); throw X(); P(6); } catch (X e) { P(7); } P(8);}

#16

Page 103: C++ Pub Quiz - Programvareverkstedetoma/PubQuiz_CPP_Oct2011.pdf · C++ Pub Quiz A 90 minute quiz session Oslo C++ Users Group Meetup October 2011 by Olve Maudal

#include <iostream>

template<typename T> void P(T x) { std::cout << x; }

struct X { X() { P('0'); } ~X() { P(1); } };

int main() { try { P(5); throw X(); P(6); } catch (X e) { P(7); } P(8);}

$ g++ --std=c++0x -O -Wall foo.cpp && ./a.out

#16

Page 104: C++ Pub Quiz - Programvareverkstedetoma/PubQuiz_CPP_Oct2011.pdf · C++ Pub Quiz A 90 minute quiz session Oslo C++ Users Group Meetup October 2011 by Olve Maudal

#include <iostream>

template<typename T> void P(T x) { std::cout << x; }

struct X { X() { P('0'); } ~X() { P(1); } };

int main() { try { P(5); throw X(); P(6); } catch (X e) { P(7); } P(8);}

$ g++ --std=c++0x -O -Wall foo.cpp && ./a.out507118

#16

Page 105: C++ Pub Quiz - Programvareverkstedetoma/PubQuiz_CPP_Oct2011.pdf · C++ Pub Quiz A 90 minute quiz session Oslo C++ Users Group Meetup October 2011 by Olve Maudal

#include <iostream>

template<typename T> void P(T x) { std::cout << x; }

struct X { X() { P('0'); } ~X() { P(1); } };

int main() { try { P(5); throw X(); P(6); } catch (X e) { P(7); } P(8);}

$ g++ --std=c++0x -O -Wall foo.cpp && ./a.out507118

#16

Bonus point if you discussed the problems of

catching execptions by copy.

Page 106: C++ Pub Quiz - Programvareverkstedetoma/PubQuiz_CPP_Oct2011.pdf · C++ Pub Quiz A 90 minute quiz session Oslo C++ Users Group Meetup October 2011 by Olve Maudal

#include <iostream>

struct A { int x; char y; int z;};

struct B : A { void foo() {}};

struct C : A { virtual void foo() {}};

struct D : A { virtual void foo() {} virtual void bar() {}}; int main() { std::cout << sizeof(A) << std::endl; std::cout << sizeof(B) << std::endl; std::cout << sizeof(C) << std::endl; std::cout << sizeof(D) << std::endl;}

#17

Page 107: C++ Pub Quiz - Programvareverkstedetoma/PubQuiz_CPP_Oct2011.pdf · C++ Pub Quiz A 90 minute quiz session Oslo C++ Users Group Meetup October 2011 by Olve Maudal

#include <iostream>

struct A { int x; char y; int z;};

struct B : A { void foo() {}};

struct C : A { virtual void foo() {}};

struct D : A { virtual void foo() {} virtual void bar() {}}; int main() { std::cout << sizeof(A) << std::endl; std::cout << sizeof(B) << std::endl; std::cout << sizeof(C) << std::endl; std::cout << sizeof(D) << std::endl;}

$ g++ --std=c++0x -O -Wall foo.cpp && ./a.out

#17

Page 108: C++ Pub Quiz - Programvareverkstedetoma/PubQuiz_CPP_Oct2011.pdf · C++ Pub Quiz A 90 minute quiz session Oslo C++ Users Group Meetup October 2011 by Olve Maudal

#include <iostream>

struct A { int x; char y; int z;};

struct B : A { void foo() {}};

struct C : A { virtual void foo() {}};

struct D : A { virtual void foo() {} virtual void bar() {}}; int main() { std::cout << sizeof(A) << std::endl; std::cout << sizeof(B) << std::endl; std::cout << sizeof(C) << std::endl; std::cout << sizeof(D) << std::endl;}

$ g++ --std=c++0x -O -Wall foo.cpp && ./a.out12

#17

Page 109: C++ Pub Quiz - Programvareverkstedetoma/PubQuiz_CPP_Oct2011.pdf · C++ Pub Quiz A 90 minute quiz session Oslo C++ Users Group Meetup October 2011 by Olve Maudal

#include <iostream>

struct A { int x; char y; int z;};

struct B : A { void foo() {}};

struct C : A { virtual void foo() {}};

struct D : A { virtual void foo() {} virtual void bar() {}}; int main() { std::cout << sizeof(A) << std::endl; std::cout << sizeof(B) << std::endl; std::cout << sizeof(C) << std::endl; std::cout << sizeof(D) << std::endl;}

$ g++ --std=c++0x -O -Wall foo.cpp && ./a.out1212

#17

Page 110: C++ Pub Quiz - Programvareverkstedetoma/PubQuiz_CPP_Oct2011.pdf · C++ Pub Quiz A 90 minute quiz session Oslo C++ Users Group Meetup October 2011 by Olve Maudal

#include <iostream>

struct A { int x; char y; int z;};

struct B : A { void foo() {}};

struct C : A { virtual void foo() {}};

struct D : A { virtual void foo() {} virtual void bar() {}}; int main() { std::cout << sizeof(A) << std::endl; std::cout << sizeof(B) << std::endl; std::cout << sizeof(C) << std::endl; std::cout << sizeof(D) << std::endl;}

$ g++ --std=c++0x -O -Wall foo.cpp && ./a.out121216

#17

Page 111: C++ Pub Quiz - Programvareverkstedetoma/PubQuiz_CPP_Oct2011.pdf · C++ Pub Quiz A 90 minute quiz session Oslo C++ Users Group Meetup October 2011 by Olve Maudal

#include <iostream>

struct A { int x; char y; int z;};

struct B : A { void foo() {}};

struct C : A { virtual void foo() {}};

struct D : A { virtual void foo() {} virtual void bar() {}}; int main() { std::cout << sizeof(A) << std::endl; std::cout << sizeof(B) << std::endl; std::cout << sizeof(C) << std::endl; std::cout << sizeof(D) << std::endl;}

$ g++ --std=c++0x -O -Wall foo.cpp && ./a.out12121616

#17

Page 112: C++ Pub Quiz - Programvareverkstedetoma/PubQuiz_CPP_Oct2011.pdf · C++ Pub Quiz A 90 minute quiz session Oslo C++ Users Group Meetup October 2011 by Olve Maudal

#include <iostream>

template<typename T> void P(T x) { std::cout << x; }

void foo(std::initializer_list<int> numbers, void (*func)(int)){ for (int n : numbers) func(n);}

int main(){ foo({1,2,3,4},[](int x){P(x+2);}); P('-'); auto f = [](){P('f'); return 0;}; auto g = [](){P('g'); return 1;}; auto h = [](char c){P(c); return 2;}('h'); auto j = f() && g(); P(j);}

#18

Page 113: C++ Pub Quiz - Programvareverkstedetoma/PubQuiz_CPP_Oct2011.pdf · C++ Pub Quiz A 90 minute quiz session Oslo C++ Users Group Meetup October 2011 by Olve Maudal

#include <iostream>

template<typename T> void P(T x) { std::cout << x; }

void foo(std::initializer_list<int> numbers, void (*func)(int)){ for (int n : numbers) func(n);}

int main(){ foo({1,2,3,4},[](int x){P(x+2);}); P('-'); auto f = [](){P('f'); return 0;}; auto g = [](){P('g'); return 1;}; auto h = [](char c){P(c); return 2;}('h'); auto j = f() && g(); P(j);}

$ g++ --std=c++0x -O -Wall foo.cpp && ./a.out

#18

Page 114: C++ Pub Quiz - Programvareverkstedetoma/PubQuiz_CPP_Oct2011.pdf · C++ Pub Quiz A 90 minute quiz session Oslo C++ Users Group Meetup October 2011 by Olve Maudal

#include <iostream>

template<typename T> void P(T x) { std::cout << x; }

void foo(std::initializer_list<int> numbers, void (*func)(int)){ for (int n : numbers) func(n);}

int main(){ foo({1,2,3,4},[](int x){P(x+2);}); P('-'); auto f = [](){P('f'); return 0;}; auto g = [](){P('g'); return 1;}; auto h = [](char c){P(c); return 2;}('h'); auto j = f() && g(); P(j);}

$ g++ --std=c++0x -O -Wall foo.cpp && ./a.outfoo.cpp: In function ‘int main()’:

#18

Page 115: C++ Pub Quiz - Programvareverkstedetoma/PubQuiz_CPP_Oct2011.pdf · C++ Pub Quiz A 90 minute quiz session Oslo C++ Users Group Meetup October 2011 by Olve Maudal

#include <iostream>

template<typename T> void P(T x) { std::cout << x; }

void foo(std::initializer_list<int> numbers, void (*func)(int)){ for (int n : numbers) func(n);}

int main(){ foo({1,2,3,4},[](int x){P(x+2);}); P('-'); auto f = [](){P('f'); return 0;}; auto g = [](){P('g'); return 1;}; auto h = [](char c){P(c); return 2;}('h'); auto j = f() && g(); P(j);}

$ g++ --std=c++0x -O -Wall foo.cpp && ./a.outfoo.cpp: In function ‘int main()’:foo.cpp:17:10: warning: unused variable ‘h’ [-Wunused-variable]

#18

Page 116: C++ Pub Quiz - Programvareverkstedetoma/PubQuiz_CPP_Oct2011.pdf · C++ Pub Quiz A 90 minute quiz session Oslo C++ Users Group Meetup October 2011 by Olve Maudal

#include <iostream>

template<typename T> void P(T x) { std::cout << x; }

void foo(std::initializer_list<int> numbers, void (*func)(int)){ for (int n : numbers) func(n);}

int main(){ foo({1,2,3,4},[](int x){P(x+2);}); P('-'); auto f = [](){P('f'); return 0;}; auto g = [](){P('g'); return 1;}; auto h = [](char c){P(c); return 2;}('h'); auto j = f() && g(); P(j);}

$ g++ --std=c++0x -O -Wall foo.cpp && ./a.outfoo.cpp: In function ‘int main()’:foo.cpp:17:10: warning: unused variable ‘h’ [-Wunused-variable]3456-hf0

#18

Page 117: C++ Pub Quiz - Programvareverkstedetoma/PubQuiz_CPP_Oct2011.pdf · C++ Pub Quiz A 90 minute quiz session Oslo C++ Users Group Meetup October 2011 by Olve Maudal

#include <iostream>

template<typename T> void P(T x) { std::cout << x; }

int j = 3;

int main(){ P(j); [&](){j++; P(j);}(); P(j); [=](){j++; P(j);}(); P(j);}

#19

Page 118: C++ Pub Quiz - Programvareverkstedetoma/PubQuiz_CPP_Oct2011.pdf · C++ Pub Quiz A 90 minute quiz session Oslo C++ Users Group Meetup October 2011 by Olve Maudal

#include <iostream>

template<typename T> void P(T x) { std::cout << x; }

int j = 3;

int main(){ P(j); [&](){j++; P(j);}(); P(j); [=](){j++; P(j);}(); P(j);}

$ g++ --std=c++0x -O -Wall foo.cpp && ./a.out

#19

Page 119: C++ Pub Quiz - Programvareverkstedetoma/PubQuiz_CPP_Oct2011.pdf · C++ Pub Quiz A 90 minute quiz session Oslo C++ Users Group Meetup October 2011 by Olve Maudal

#include <iostream>

template<typename T> void P(T x) { std::cout << x; }

int j = 3;

int main(){ P(j); [&](){j++; P(j);}(); P(j); [=](){j++; P(j);}(); P(j);}

$ g++ --std=c++0x -O -Wall foo.cpp && ./a.out34455

#19

Page 120: C++ Pub Quiz - Programvareverkstedetoma/PubQuiz_CPP_Oct2011.pdf · C++ Pub Quiz A 90 minute quiz session Oslo C++ Users Group Meetup October 2011 by Olve Maudal

#include <iostream>

template<typename T> void P(T x) { std::cout << x; }

int j = 3;

int main(){ P(j); [&](){j++; P(j);}(); P(j); [=](){j++; P(j);}(); P(j);}

$ g++ --std=c++0x -O -Wall foo.cpp && ./a.out34455

#19

Bonus point if you used the word capture when discussing this code

snippet.

Page 121: C++ Pub Quiz - Programvareverkstedetoma/PubQuiz_CPP_Oct2011.pdf · C++ Pub Quiz A 90 minute quiz session Oslo C++ Users Group Meetup October 2011 by Olve Maudal

#include <iostream>

template<typename T> void P(T x) { std::cout << x; }template<typename T> void foo(T *) { P(2); }template<typename T> void foo(T &&) { P(4); }template<> void foo(int&) { P(5); }

int main(){ int a = 65; foo(a); foo(&a); char b = 'a'; foo(b); foo(&b);}

#20

Page 122: C++ Pub Quiz - Programvareverkstedetoma/PubQuiz_CPP_Oct2011.pdf · C++ Pub Quiz A 90 minute quiz session Oslo C++ Users Group Meetup October 2011 by Olve Maudal

#include <iostream>

template<typename T> void P(T x) { std::cout << x; }template<typename T> void foo(T *) { P(2); }template<typename T> void foo(T &&) { P(4); }template<> void foo(int&) { P(5); }

int main(){ int a = 65; foo(a); foo(&a); char b = 'a'; foo(b); foo(&b);}

$ g++ --std=c++0x -O -Wall foo.cpp && ./a.out

#20

Page 123: C++ Pub Quiz - Programvareverkstedetoma/PubQuiz_CPP_Oct2011.pdf · C++ Pub Quiz A 90 minute quiz session Oslo C++ Users Group Meetup October 2011 by Olve Maudal

#include <iostream>

template<typename T> void P(T x) { std::cout << x; }template<typename T> void foo(T *) { P(2); }template<typename T> void foo(T &&) { P(4); }template<> void foo(int&) { P(5); }

int main(){ int a = 65; foo(a); foo(&a); char b = 'a'; foo(b); foo(&b);}

$ g++ --std=c++0x -O -Wall foo.cpp && ./a.out5242

#20

Page 124: C++ Pub Quiz - Programvareverkstedetoma/PubQuiz_CPP_Oct2011.pdf · C++ Pub Quiz A 90 minute quiz session Oslo C++ Users Group Meetup October 2011 by Olve Maudal

Max score is 3x20 + 12 = 72 points

>60 points = not sure if I believe you>50 points = exceptionally good results >35 points = very, very good>20 points = you certainly know something about>10 points = you need to study more<1 point = you are probably a bit too confident

Page 125: C++ Pub Quiz - Programvareverkstedetoma/PubQuiz_CPP_Oct2011.pdf · C++ Pub Quiz A 90 minute quiz session Oslo C++ Users Group Meetup October 2011 by Olve Maudal

+ +