隐式定义的复制构造函数的生成是 如果T具有用户定义的析构函数或用户定义的副本,则不推荐使用 赋值运算符。
但是下面的代码,没有使用clang ++和c ++
给出警告消息struct CAT
{
CAT(){cout<<"CAT()"<<endl;}
~CAT(){}
};
int main()
{
CAT c1, c2;
CAT c3(c1); //should print out a warning?
}
clang++-3.6 -W -Wall -Wextra -pedantic -O2 -o m main.cpp -pedantic-errors -std=c++14
是g ++和clang ++的预期行为吗?
答案 0 :(得分:1)
clang ++有这个警告:
main.cpp:6:5: warning: definition of implicit copy constructor for 'CAT' is deprecated because it has a user-declared destructor [-Wdeprecated]
~CAT(){}
^
main.cpp:12:9: note: implicit copy constructor for 'CAT' first required here
CAT c3(c1); //should print out a warning?
^
1 warning generated.