C++ 错误的数组初始化与分配副本构造函数初始化 #包括 使用名称空间std; 课堂测试 { 公众: Test(){} Test(int-param):i(param){} int i; }; int main() { 试验obj1(100); //测试obj2[100](obj1);-我知道这不起作用 测试obj3[10]=obj1;//这是可行的 cout

C++ 错误的数组初始化与分配副本构造函数初始化 #包括 使用名称空间std; 课堂测试 { 公众: Test(){} Test(int-param):i(param){} int i; }; int main() { 试验obj1(100); //测试obj2[100](obj1);-我知道这不起作用 测试obj3[10]=obj1;//这是可行的 cout,c++,copy-constructor,C++,Copy Constructor,我主要是回答你最后的评论,因为所有元素都已经在评论中给出了 我们能看到什么: 第一语法测试对象2(100)(Obj1);被所有编译器测试为错误,因为……它不遵循C++语言的规范! 第二种语法Test obj2[100]=obj1;似乎不完全符合当前规范,因为您使用单个元素初始化数组。有关此语法的详细信息: 叮当声(和MSVC)会发生冲突:它们需要大括号,然后只初始化第一个元素(可能是:testobj2[100]={obj1};) gcc(4.5到4.9)接受它,并使用obj1 我的观点是

我主要是回答你最后的评论,因为所有元素都已经在评论中给出了

我们能看到什么:

  • 第一语法<代码>测试对象2(100)(Obj1);<代码>被所有编译器测试为错误,因为……它不遵循C++语言的规范!
  • 第二种语法
    Test obj2[100]=obj1;
    似乎不完全符合当前规范,因为您使用单个元素初始化数组。有关此语法的详细信息:
    • 叮当声(和MSVC)会发生冲突:它们需要大括号,然后只初始化第一个元素(可能是:
      testobj2[100]={obj1};
    • gcc(4.5到4.9)接受它,并使用
      obj1

我的观点是,由于它不正确,C++和它在一些使用过的C++编译器上会引起错误,所以即使在用红色闪亮的字体记录文档时,也应该避免使用第二个语法。

它不起作用,因为它是不允许的。<代码>是值初始化,除非它是一个数组,否则程序是不正确的。@Puppy不要含糊其辞;告诉我们您对本机数组的真实感受=P
Test obj3[10]=obj1;//这是有效的
-真的吗?3.5无论在何种模式(c++11或其他模式)下都会吐出来@WhozCraig GCC bug或扩展名。神秘的编译器可能是4.5到4.9版本的GCC(刚刚在godbolt.org上测试了该代码段)。但不要问我它对编译器的实际意义,大概它值初始化了数组的第一个元素?
#include<iostream>
using namespace std;

class Test
{
public:
    Test(){}
    Test(int param):i(param){}
    int i;
};

int main()
{

    Test obj1(100);
    //Test obj2[100](obj1) ;  - This doesn't work I know
    Test obj3[10] = obj1; //This works
    cout<<obj3[9].i<<endl;
    return 1;
}