1

我编译并运行了以下 C++ 代码,盲目地尝试创建一个灵活的数组成员,就像在 C 中一样:

#include <iostream>

template <typename T>
struct Vector {
    int length;
    T ts[];
};

Vector<int> ts = {
    3,
    {10, 10, 10},
};


int main() {
    std::cout << sizeof(ts) << std::endl;
    std::cout << ts.data[1] << std::endl;
    return 0;
}

代码编译和运行得很好,并给出了与 C 在相同情况下相同的输出(输出 4,然后输出 10)。

现在,根据2010 年的这个答案,我写的应该不是有效的 C++。此外,根据这篇维基百科文章,“C++ 没有灵活的数组成员”。

我的问题是,我在上面的代码中实际使用了哪个 C++ 功能,特别是在“ T ts[];”那一行?该代码实际上是按照我认为的一般情况执行的,还是未定义的行为?

4

1 回答 1

2
于 2017-09-08T03:41:28.703 回答