如果只写int i();的话,编译器会认为这是一个名为i,不带参数,返回int的函数的声明。要初始化的话必须加个数字或者用等号。
两种初始化方式理论上不一样,int i(n);这种是直接初始化,给i分配内存的时候就直接将这个内存的内容初始化为n的值,而int i=n;这样是复制初始化,先给i分配个内存,然后判断字面值n的类型,然后分配个内存,构造一个该类型的临时变量,然后将n复制到i 。
实际上对普通的变量而言这两种方式的运行代价差异几乎可以不考虑,但是对于类类型,就必须考虑一些构造、析构之类的问题。