在下面的代码中,我似乎不理解大括号初始化的局限性.他们到底做了什么?在A的情况下,它只是将[0]设置为直接等于该值.在b的情况下,它使用隐式转换.它是根据可用的内容决定做哪一个,还是使用其他方法?
#include <iostream>
using namespace std;
struct A
{
};
struct B
{
B(int a) { cout << a; }
};
int main()
{
A* a[] = {new A()};
B b[] = {1};
}
Run Code Online (Sandbox Code Playgroud)
这种类型的花括号初始化在Java中的工作方式也类似吗?
public class A
{
public static void main(String[] args)
{
someClass[] sC = { /* what can go here? an argument to the constructor,
or just a value to set the variable equal to */ }.
}
}
Run Code Online (Sandbox Code Playgroud)
很抱歉,如果我的问题看起来很愚蠢,那么我真的想了解更多有关c ++和Java中的花括号的信息.提前致谢 :-)
由于Java部分已经得到解答,我将添加一些关于C++部分的内容.您引用的大括号初始化的特定版本称为聚合初始化,并且(不出所料)用于初始化聚合.聚合中的每个元素都将使用大括号内的相应元素进行初始化,您可以使用任何您想要使用的元素,这些元素可以隐式转换为聚合中元素的类型.
对于特定的数组,您可能需要考虑该功能的几个特定部分.花括号内的元素数量不能大于数组的大小,但它可以更小,在这种情况下,其余元素将默认初始化.
int a[5] = { 1, 2 }; // [ 1, 2, 0, 0, 0 ]
Run Code Online (Sandbox Code Playgroud)
如果用户代码中未提供数组的大小,则编译器会将其设置为聚合初始化列表中的元素数:
int a[] = { 1, 2, 3 }; // int a[3]
Run Code Online (Sandbox Code Playgroud)
请注意,与Java不同,大小是数组类型的组成部分,因此,虽然您可以键入int a[] = { 1 };,但它永远不能是未确定数量的通用数组.int
在C++ 11中,大括号语法已经扩展为提供统一初始化,但这可能超出了问题的范围,我只是提到它以防你想要阅读更多有关该主题的内容.
| 归档时间: |
|
| 查看次数: |
4263 次 |
| 最近记录: |