以下代码仅在复制构造函数可用时有效.
当我添加print语句(via std::cout)并使复制构造函数可用时,它不会被使用(我假设有这样的编译器技巧,以删除不必要的副本).
但是在输出operator <<和plop()下面的函数(我创建一个临时对象)中我都没有看到复制构造函数的需要.当我通过const引用(或者我做错了)传递所有内容时,有人可以解释为什么语言需要它.
#include <iostream>
class N
{
public:
N(int) {}
private:
N(N const&);
};
std::ostream& operator<<(std::ostream& str,N const& data)
{
return str << "N\n";
}
void plop(std::ostream& str,N const& data)
{
str << "N\n";
}
int main()
{
std::cout << N(1); // Needs copy constructor (line 25)
plop(std::cout,N(1)); // Needs copy constructor
N a(5);
std::cout << a;
plop(std::cout,a);
}
Run Code Online (Sandbox Code Playgroud)
编译:
[Alpha:〜/ X] myork%g ++ -v
使用内置规格.
目标:i686-apple-darwin10
配置:/ var/tmp/gcc/gcc-5646~6/src/configure --disable-checking --enable-werror --prefix …