static-initialization

Trouble launching CUDA kernels from static initialization code

你离开我真会死。 提交于 2019-11-26 06:47:57
问题 I have a class that calls a kernel in its constructor, as follows: \"ScalarField.h\" #include <iostream> void ERROR_CHECK(cudaError_t err,const char * msg) { if(err!=cudaSuccess) { std::cout << msg << \" : \" << cudaGetErrorString(err) << std::endl; std::exit(-1); } } class ScalarField { public: float* array; int dimension; ScalarField(int dim): dimension(dim) { std::cout << \"Scalar Field\" << std::endl; ERROR_CHECK(cudaMalloc(&array, dim*sizeof(float)),\"cudaMalloc\"); } }; \"classA.h\"

Why isn&#39;t a qualified static final variable allowed in a static initialization block?

佐手、 提交于 2019-11-26 04:45:47
问题 Case 1 class Program { static final int var; static { Program.var = 8; // Compilation error } public static void main(String[] args) { int i; i = Program.var; System.out.println(Program.var); } } Case 2 class Program { static final int var; static { var = 8; //OK } public static void main(String[] args) { System.out.println(Program.var); } } Why does Case 1 cause a compilation error? 回答1: The JLS holds the answer (note the bold statement): Similarly, every blank final variable must be