#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;
}
在上面的代码中,Test obj2[100](obj1);
无效,Test obj3[10] = obj1;
为什么前者支持但后者支持。(两者都将调用复制构造函数。)
由于编译器中的实现限制,是不是支持前者?
编辑:我没有使用c ++ 11。 gcc版本4.8.2(i686-posix-dwarf-rev3,由MinGW-W64项目构建) Qt 5.3.1
有任何结论吗?
答案 0 :(得分:1)
我主要回答你的上一条评论,因为所有元素都已在评论中提供。
我们能看到什么:
Test obj2[100](obj1);
被所有被测试的编译器拒绝为错误,因为......它不遵循C ++语言的规范!Test obj2[100] = obj1;
似乎并不完全符合当前规范,因为您使用单个元素初始化数组。更多内容:
Test obj2[100] = {obj1};
)obj1
我的观点是,由于不清楚它是正确的C ++,并且因为它会导致一些使用频繁的C ++编译器出错,所以你应该避免使用第二种语法,除非用红色闪烁字体记录它。