为什么建造者无法重新认证?此代码将无法编译:
<?php
require('fpdf/fpdf.php');
$pdf = new FPDF('P','mm',array(45,10));
$pdf->SetMargins(0,5,0);
$pdf->AddPage('L');
$pdf->SetFont('Arial','B',9);
$pdf->Cell(0, 0,'ASERJFBJGFJSFDS');
$pdf->Output('label','I');
?>
错误:构造函数可能不符合参考资格
答案 0 :(得分:4)
Rvalue - this
限定能够区分val.func()
,std::move(val).func()
和Type().func()
(前者调用&
,后者调用{{ 1}})。这使您可以明确&&
可以从func
的内容中移除。
但是在构造函数中,您正在初始化对象。从*this
的内容移开是没有意义的,因为对象仍在初始化。
因此,想要限定构造函数的唯一可能原因是让构造函数区分构造临时值和构造非临时值。而这种分化总体上毫无意义。而且很危险。
保证省略,这是自我失败。因为感谢C ++ 17的保证省略,*this
根本不会产生临时性。它只是初始化auto val = Typename();
,就像完成val
一样。那么,究竟何时应该调用Typename val();
&&
构造函数?
最后,这是一个毫无意义的想法。