首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >数组的初始化体作为函数参数(C数组),可以吗?

数组的初始化体作为函数参数(C数组),可以吗?
EN

Stack Overflow用户
提问于 2011-10-05 15:17:55
回答 3查看 20K关注 0票数 23

我正在寻找下一种情况下的帮助:

我有一些类和一些方法,语法是这样的:

代码语言:javascript
复制
class SomeClass {  
    public:  
            void doSomething(int *a);  
};

所以我想像这样调用这个方法

代码语言:javascript
复制
SomeClass::doSomething({ 0, 1, 2, 3, 4 });

这在任何语言中都可能实现吗?任何(C++,C,obj-c,obj-c++)实现都是受欢迎的!我知道这个初始化块是一个数组主体,比如

代码语言:javascript
复制
int *a = { 0, 1, 2, 3, 4 };
SomeClass::doSomething(a);

但我认为,如果在函数调用之前没有临时变量(因为我们不需要知道class-client中的参数类型),那么接口看起来会很棒。那么,有没有可能做到这一点呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-10-05 15:19:51

这是关于C++11 initializer lists (18.9部分)的。

代码语言:javascript
复制
void foo (std :: initializer_list <int> inputs) {
    for (auto i : inputs) {
        // ...
    }
}

foo ({10, 20, 30});

只有编译器可以创建初始化器列表,但您可以将其视为具有begin()end()size()和随机访问迭代器的标准STL式容器。

std::vector (我希望还有其他一些容器)现在可以用初始化器列表构造,所以

代码语言:javascript
复制
std :: vector <std :: string> foo {"a", "b"};

等同于

代码语言:javascript
复制
std :: vector <std :: string> foo;
foo .push_back ("a");
foo .push_back ("b");

除了它可能执行较少的分配之外。请注意,const char*已自动转换为std::string

票数 8
EN

Stack Overflow用户

发布于 2011-10-05 15:33:04

在C99中,这是可行的:

代码语言:javascript
复制
functionThatTakesIntPtrOrArray( (int []){ 1, 2, 3, 4 } );

..and类似的事情也可以用结构来完成。

票数 27
EN

Stack Overflow用户

发布于 2015-09-25 07:12:54

如果initializer_list不可用,并且数组大多很小,那么还有另一个选项,为std::vector重载<<运算符,如下所示:

代码语言:javascript
复制
template <typename T>
inline std::vector<T> operator <<( const std::vector<T>& vec, const T& val ) {
    std::vector<T> result(vec);
    result.push_back(val);
    return result;
}

有了它,你可以这样做:

代码语言:javascript
复制
void foo (const std::vector<int>& inputs) {
    // ...
}

foo ( std::vector<int>() << 10 << 20 << 30 );

这种单行初始化的便利性以及不必指定向量大小是要付出代价的。为添加的每个元素创建一个先前向量的副本,使运行时间至少是向量大小的二次--这就是为什么这最适合于短向量和性能不重要的情况。正如spraff的答案所指出的,C++11有一个更好的解决方案。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7657910

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档