デフォルト引数が評価されるタイミング
デフォルト引数が評価されるタイミングが気になったので、ちょっと実行してみました。
c++のコード
#include <iostream> #include <cstdlib> #include <ctime> void func(int i = rand()) { std::cout << i << std::endl; } int main(void) { srand(time(NULL)); func(); func(); func(); return 0; }
c++の結果
247111784 168458104 1083831553
rubyのコード
def func(i = rand()) print "#{i}\n" end func func func
rubyの結果
0.418264634981435 0.894746224876965 0.805637328790286
pythonのコード
import random def func(i = random.random()): print i func() func() func()
pythonの結果
0.542012394526 0.542012394526 0.542012394526