我想知道是否可以让编译器发出警告/错误代码,如下所示:
Note:
1. 年,这是不好的编程风格,我们应该避免这种情况 - 但我们正在处理遗留代码,希望编译器可以帮助我们识别这种情况。)
2. 我更喜欢使用编译器选项 (VC++) 来禁用或启用对象切片(如果有)。
class Base{};
class Derived: public Base{};
void Func(Base)
{
}
//void Func(Derived)
//{
//
//}
//main
Func(Derived());
在这里,如果我注释掉第二个函数,第一个函数将被调用 - 并且编译器(VC++ 和 Gcc)对此感到满意。
是C++标准吗?我可以要求编译器(VC++)在遇到这样的代码时给我一个警告吗?
非常感谢!!!
Edit:
非常感谢大家的帮助!
我找不到给出错误/警告的编译器选项 - 我什至在 VC++ 编译器顾问的 MSDN 论坛上发布了此内容,但没有答案。所以恐怕gcc和vc++都没有实现这个功能。
因此,添加以派生类作为参数的构造函数将是目前最好的解决方案。
Edit
我已向 MS 提交反馈,希望他们尽快修复:
https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=421579 https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=421579
-Baiyan
如果您可以修改基类,您可以执行以下操作:
class Base
{
public:
// not implemented will cause a link error
Base(const Derived &d);
const Base &operator=(const Derived &rhs);
};
根据您的编译器应该为您提供翻译单元,也许还有发生切片的函数。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)