C++ 在函数调用中声明数组

C++ 在函数调用中声明数组,c++,arrays,visual-studio-2010,C++,Arrays,Visual Studio 2010,好的,我知道这在C++0x/C++11中是可能的,因此可以在Visual Studio 2012中完成 但是,我正在运行VisualStudio2010。我想知道是否有可能做类似的事情: void MyFunction(int myArray[]) {} MyFunction({1,2,3}) 而不必事先声明数组 在C++ Visual Studio 2010版本中使用了任何可行的方法吗?或者以某种方式更新VisualStudio2010使用的编译器以支持更多C++11功能?还是我别无选择 编

好的,我知道这在C++0x/C++11中是可能的,因此可以在Visual Studio 2012中完成

但是,我正在运行VisualStudio2010。我想知道是否有可能做类似的事情:

void MyFunction(int myArray[])
{}
MyFunction({1,2,3})

而不必事先声明数组

<>在C++ Visual Studio 2010版本中使用了任何可行的方法吗?或者以某种方式更新VisualStudio2010使用的编译器以支持更多C++11功能?还是我别无选择

编辑: 多亏了yzt,我才能够用Boost做到这一点

下面是一些示例代码,以防其他人恰好处于我的位置(我似乎无法使用普通数组,但
std::vector
(或者另一个stl容器)等就可以了!)

职能:

void TestFunction(std::vector<int> myArray)
{
    for(std::vector<int>::size_type i = 0; i < myArray.size(); ++i)
    {
        std::cout<<myArray[i]<<std::endl;
    }
}
void TestFunction(std::vector myArray)
{
对于(std::vector::size_type i=0;istd::coutVisual Studio中的大纲C++11支持表示VC10或VC11中不支持。

在Visual Studio 2010或2012中不可能实现。抱歉!

我不确定您的确切用例,但您可能可以使用它来实现这一点。是的,它在VC10中确实有效

如评论中所述,可以这样做:

TestFunction(boost::assign::list_of(1)(2)(3));
<> Pc++ C++唯一支持这个的版本(Visual C++)是Visual C++ 2013预览。 如果你真的打算这么做,你可以定义一个vector_builder类,它可以让你在一行中完成这项工作——但有几个限制条件:首先,它必须是一个向量而不是数组,其次,执行这项工作的语法非常难看而且违反直觉(甚至我都不愿意提及它)


正如我所说,这让我觉得很难看,以至于我不愿意提及它——但你可能更喜欢它,而不是可用的替代品。

为什么不起作用的可能重复?这在VC11(VS2012)中也不受支持,但在VC12(VS2013预览版)中可用我似乎记得Boost在这个领域有一个库(指定给STL容器)。我在C语言中,可以做一些事情,比如“代码> int [],新的INT[] } 1, 2, 3,<代码>,但不是C++。我想在你的示例用法代码中有一个额外的开放括号(在代码> 1代码/代码>之前)。应该是<代码>(MakEvECT(1))。,2,3))
,我相信。加上1,指出这种类型的编码风格有多么丑陋。
TestFunction(boost::assign::list_of(1)(2)(3));
谢谢!:D
template<class T>
class make_vector {
    std::vector<T> data;
public:
    make_vector(T const &val) { 
        data.push_back(val);
    }

    make_vector<T> &operator,(T const &t) {
        data.push_back(t);
        return *this;
    }

    operator std::vector<T>() { return data; }
};

template<class T> 
make_vector<T> makeVect(T const &t) { 
    return make_vector<T>(t);
}
MyFunction((makeVect(1),2,3));