函数调用或构造函数调用中的 C++ 数组初始化
Posted
技术标签:
【中文标题】函数调用或构造函数调用中的 C++ 数组初始化【英文标题】:C++ Array Initialization in Function Call or Constructor Call 【发布时间】:2010-04-20 16:09:52 【问题描述】:这个问题与帖子here有关。是否可以在函数调用或构造函数调用中初始化数组?例如,类 foo 的构造函数想要一个大小为 3 的数组,所以我想调用 foo( 0, 0, 0 )。我已经尝试过了,但它不起作用。我希望能够在其他对象的构造函数初始化列表中初始化 foo 类型的对象,或者在不首先创建单独的数组的情况下初始化 foo。这可能吗?
【问题讨论】:
先说数组初始化,突然就需要初始化一个类对象。那么你需要初始化什么:一个数组对象还是一个类对象? 初始化一个类是我用作示例的一个具体案例,也是我提出这个问题的原因。但是,您也可以有一个函数 foo,它接受一个大小为 3 的数组并希望将其称为: foo( 0, 0, 0 )。我已经更改了 OP 以使其更加明显。 是的,但是您仍然在问“是否可以在不分配数组的情况下对其进行初始化?”。嗯,是的,这是可能的。例如,int a[10] = 5
初始化一个数组而不分配它,就像你问的那样。然而,这看起来不像你真正感兴趣的东西。
我明白你在说什么。我当时认为 a[] = 5 是一项任务。但是,您说得对,事实并非如此。我已经更新了帖子标题。
"没有先创建一个单独的数组"
【参考方案1】:
不在当前标准中。这将在 C++11 中成为可能
在 gcc 中,您可以使用强制转换来强制创建时间,但它不是标准 c++ (C99):
typedef int array[2];
void foo( array ) // Note: the actual signature is: void foo( int * )
int main()
foo( (array) 1, 2 );
【讨论】:
这在 C99 中有效,但在 C++03 中无效(在 C++0x 中也不 - 这是一个复合文字)。 代码可以使用 (macports) gcc 到 4.6; gcc 4.7 报告error: taking address of temporary array
。
C++11 是当前标准,所以这个答案需要更新。【参考方案2】:
如果您的设计允许,您可以考虑将数据包装在一个类中,并在默认构造函数中初始化为 0(或您选择的任何值)
【讨论】:
以上是关于函数调用或构造函数调用中的 C++ 数组初始化的主要内容,如果未能解决你的问题,请参考以下文章