array[n]与array[]的区别
Difference between array[n] and array[]?
有什么区别吗?例如
int array[]={1, 2, 3, 4, 5};
,
int array[5]={1, 2, 3, 4, 5};
编译器需要自己计算第一种情况下的元素数量,这可能需要一些时间({...}
的1234332534个元素),所以第二种情况比第一种有效?
这个数组声明:
int array[] = {1, 2, 3, 4, 5};
与
完全相同int array[5] = {1, 2, 3, 4, 5};
元素的数目是在编译时计算的,所以没有运行时开销。
只要[]
之间的显式元素数与{}
之间的初始化式数相同,就没有区别。
关于"效率"的问题是没有意义的。数组大小是在编译时确定的,这意味着它对代码的效率没有影响。因为在任何情况下编译器都必须解析初始化列表,所以它对编译的效率没有真正的影响。
- 最终结果没有差异;但是,第一种形式更容易编写和维护,因为您不必手动计数元素。
- 编译器可能无论如何都要计算元素:它必须检测它们是否较多,因为这是一个编译错误,如果它们较少,则必须将其他元素初始化为零。 无论如何,这样的计数是在编译时完成的,所以对生成的可执行文件的性能没有影响。
- 一般来说,你永远不会在堆栈上或作为全局变量创建非常大的数组(因为通常大的堆栈分配失败,并且作为全局变量的大数组将导致巨大的可执行文件†)。
- 即使你设法让编译器接受一个包含1234332534个元素的静态/局部数组,元素的计数可能是这个编译的最后一个性能问题。
。另一方面,大的全局数组是二进制资源通常包含在固件中以闪现到嵌入式设备上的方式。但我认为没有人会考虑使用这种暴力方法来处理大于几mb的内容。
没有区别,只是程序员不必确定数组中有多少个元素。编译器仍然会对元素进行计数以分配适当的数量,因此编译器在编译时所花费的时间长度相同。
在第二种情况下,如果初始化内存的值数量错误,预编译器将捕获错误。
相关文章:
- C++中std::resize(n)和std::shrink_to_fit之间的区别
- int(c) 和 c-'0' 之间的区别。C++
- 向量 <int> a {N, 0} 和 int arr a[N] = {0} 的时间复杂度有什么区别
- C++ - "!pointer"和"pointer == nullptr"的区别?
- C++ 使用 assign 函数的字符串与直接使用 '=' 更改值的字符串之间的区别
- std::atomic和std::condition_variable wait,notify_*方法之间的区别
- 在 .h 文件中的类中声明静态变量和在.cpp文件中声明"global"变量有什么区别
- 我是C++编程的新手,这些代码之间有什么区别,我应该使用哪一个
- 在 const 函数中通过引用和指针返回之间的区别
- 我想知道长双倍和双倍之间的区别
- 返回常量对象引用 (getter) 和仅返回字符串有什么区别?
- 返回递归调用和仅递归调用的区别
- Qt:remove() 和 rmdir() 有什么区别
- C++ &array和array的用法有什么区别?
- std::array 和 boost::array 之间的区别
- std::vector和std::array初始值设定项列表之间的区别
- std::valarray和std::array之间有什么区别
- 带有std::array的可变进模板结构体与c风格数组成员的区别
- array[n]与array[]的区别
- int * array[60] 和 int * array = new int(60);之间的区别