InQ*_*ive 5 c++ copy-constructor
#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;
}
Run Code Online (Sandbox Code Playgroud)
在上面的代码Test obj2[100](obj1);
不起作用Test obj3[10] = obj1;
为什么前者支持但后者支持.(两者都将调用复制构造函数.)
是不是因为编译器中的实现限制而不支持前者?
编辑:我没有使用c ++ 11.gcc版本4.8.2(i686-posix-dwarf-rev3,由MinGW-W64项目构建)Qt 5.3.1
有什么结论?
我主要是回答你最后的评论,因为所有元素都已经在评论中给出了。
我们能看到什么:
Test obj2[100](obj1);
被所有测试的编译器视为错误而拒绝,因为......它不遵循 C++ 语言规范!Test obj2[100] = obj1;
似乎并不完全符合当前规范,因为您使用单个元素初始化数组。更多相关内容:
Test obj2[100] = {obj1};
:)obj1
我的观点是,由于不清楚它是否是正确的 C++,并且它会在一些频繁使用的 C++ 编译器上导致错误,因此您应该避免使用第二种语法,除非以红色闪烁字体记录该语法。
归档时间: |
|
查看次数: |
1089 次 |
最近记录: |