常量内存的初始化问题

大家好,请教一个很简单的入门问题:
刚学习了constant memory,在代码中想把一些常数变量挪到内存中。这里有如下两种初始化方式:

第一种,在main函数体外,file scope内声明,并直接给初值:

__constant__ double a = 140.0;

第二种,在main函数体外,file scope内声明,但在main函数内利用cudaMemCpyToSymbol给初值:

__constant__ double a;

void main()
{
   double h_a = 140.0;
   cudaMemCpyToSymbol(a,&h_a,sizeof(double));
}

我的问题是:
是不是第一种是错的,必须用cudaMemCpyToSymbol来对这种常量内存初始化?
如果不是错的,请问这两种方式有区别吗?第一种算作为第二种的简化?这两种方式都通过编译了。