我可以为一个构造函数使用一组整数,为另一个构造函数使用一个整数吗?

发布于 2024-10-27 08:12:49 字数 114 浏览 1 评论 0原文

同一 IntList 类中是否允许使用以下构造函数?

IntList(int length);
IntList(int data[]);

Are the following constructors allowed in the same IntList class?

IntList(int length);
IntList(int data[]);

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

假装爱人 2024-11-03 08:12:49

这很好,但请注意,后者与 int* data 相同,它是一个指针而不是一个数组。

数组是不可复制的,必须通过引用传递:

typedef int array_type[5];

IntList(const array_type& arr); // same as: IntList(const int (&arr)[5]);

您还可以使用模板获取任何大小的数组:

template <std::size_t N>
IntList(const int (&arr)[N]); // N is the number of elements

但您的方法最终是非正统的。如果您想使用一系列数据进行初始化,请使用迭代器:

template <typename InputIterator>
IntList(InputIterator begin, InputIterator end);

现在您可以从 begin 迭代到 end,它可以是来自任何类型容器的迭代器,例如数组, std::vectorstd::map 等等。

但无论如何,您应该使用 std::vector 而不是 IntList

That's fine, but note that latter is the same as int* data, which is a pointer and not an array.

Arrays are non-copyable and must be passed by reference:

typedef int array_type[5];

IntList(const array_type& arr); // same as: IntList(const int (&arr)[5]);

You can also take an array of any size using templates:

template <std::size_t N>
IntList(const int (&arr)[N]); // N is the number of elements

But your approach is ultimately unorthodox. If you want to initialize with a range of data, use iterators:

template <typename InputIterator>
IntList(InputIterator begin, InputIterator end);

Now you can iterate from begin to end, which can be iterators from any kind of container, like arrays, std::vector's, std::map's and more.

But you should be using std::vector<int> instead of IntList anyway.

单挑你×的.吻 2024-11-03 08:12:49

是的,它们是不同的类型,所以这是有效的。

Yes, they're different types so this is valid.

你的呼吸 2024-11-03 08:12:49
IntList(int length);
IntList(int data[]);

然而,这不能作为另一种方法。

IntList(int* data);  // Error: This is equivalent to IntList(int data[])
                     // Because an array decays to a pointer.

两者的论点不同。 length 的类型为 intdata 的类型为 int[],并且是构造函数的示例 超载


根据您对如何使用它的评论 - 这应该作为一个例子

class IntList
{
    int member[5] ;  // Added
    public:
       IntList(int length) ;
       IntList( int data[] )  // Should make sure that the passed array size is 5
                              // or take another argument mentioning the size of
                              // array being passed.
       {
           for(int i=0; i<5; ++i)
               member[i] = data[i] ;
       }
} ;


int a[] = { 1,2,3,4,5 };   // Making sure that array size is 5
IntList obj(a) ; // Array decays to a pointer pointing to first index of the array
IntList(int length);
IntList(int data[]);

How ever, this not allowed to have as another method.

IntList(int* data);  // Error: This is equivalent to IntList(int data[])
                     // Because an array decays to a pointer.

Both the arguments are different. length is of type int and data is of type int[], and is an example of constructor overloading.


Upon your comment as to how use it - This should serve as an example

class IntList
{
    int member[5] ;  // Added
    public:
       IntList(int length) ;
       IntList( int data[] )  // Should make sure that the passed array size is 5
                              // or take another argument mentioning the size of
                              // array being passed.
       {
           for(int i=0; i<5; ++i)
               member[i] = data[i] ;
       }
} ;


int a[] = { 1,2,3,4,5 };   // Making sure that array size is 5
IntList obj(a) ; // Array decays to a pointer pointing to first index of the array
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文