Java C+中的花括号初始化+;和爪哇

Java C+中的花括号初始化+;和爪哇,java,c++,arrays,Java,C++,Arrays,在下面的代码中,我似乎不理解花括号初始化的局限性。他们实际上做什么?对于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

在下面的代码中,我似乎不理解花括号初始化的局限性。他们实际上做什么?对于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};    
}

对不起,如果我的问题看起来很傻,只想知道更多关于C++和java中括号的更多信息。谢谢:(<

P>)我不太清楚C++是如何完成的,但是在java中你可以做到:

String[] array = new String[]{ "a", "b", "c" };

因此,您不需要将参数传递给构造函数,而是传递对象本身。

这与C中的情况相同++

someClass[] sC = { new someClass(), new someClass(), new someClass() };
int[] i = { 1, 2, 3 };
String[] s = { "1", "2", "3" };
在Java中,是一个容器对象

您可以将
someClass
或其
子类的基元类型和对象引用的值存储到
someClass[/sC
的数组中

class SomeClass {}
class Foo extends SomeClass{}

Foo f=new Foo();
SomeClass []sC={f,new Foo(),new SomeClass()};

<>既然java部分已经被回答,我将添加C++部分。您提到的花括号初始化的特定版本称为聚合初始化,并且(毫不奇怪)用于初始化聚合。聚合中的每个元素都将使用大括号内的相应元素进行初始化,您可以使用任何可以隐式转换为聚合中元素类型的元素

<> P>有两个特定的特性部分,您可能需要考虑数组的特定情况。大括号内的元素数不能大于数组的大小,但可以更小,在这种情况下,其余元素将默认初始化

int a[5] = { 1, 2 }; // [ 1, 2, 0, 0, 0 ]
如果用户代码中未提供数组的大小,编译器将其设置为聚合初始化列表中的元素数:

请注意,与Java不同,大小是数组类型的一个组成部分,因此,尽管您可以键入
inta[]={1}
,它永远不能是一个包含不确定数量的
int
的通用数组


在C++11中,大括号语法已经扩展,以提供统一的初始化,但这可能超出了问题的范围,我只是提到它,以防您想阅读更多有关该主题的内容。

数组初始值设定项列表,有关更多信息:不仅包括引用,还包括基元类型的值。
int a[5] = { 1, 2 }; // [ 1, 2, 0, 0, 0 ]
int a[] = { 1, 2, 3 }; // int a[3]