dha*_*ann 9 c++ explicit-constructor c++03
我们使用的外部库包含以下显式构造函数:
class Chart {
public:
explicit Chart(Chart::Type type, Object *parent);
// ...
};
Run Code Online (Sandbox Code Playgroud)
编译器抱怨以下警告:
chart.h: warning #2305: declaration of 'explicit' constructor
without a single argument is redundant
Run Code Online (Sandbox Code Playgroud)
是否二进制兼容只是删除explicitchart.h 中的关键字而不重新编译库以避免警告?我的感觉是它很安全,因为explicit在这种情况下无论如何都没有意义.谁能确认一下?
如果你理解了我的意思,那么你在乡村英里的最佳选择是关闭那个包含期间的警告.不要破解供应商代码.
explicit因为它可用于停止隐式括号初始化,所以在C++ 11之后使用多参数构造函数非常有意义.此外,标准并未说删除explicit必须保留类的布局,因此您必须假设删除explicit 可能会破坏二进制兼容性.另外,丢弃它可能会改变人为SFINAE模式的行为,因为构造函数在某些情况下可能会重新可用.见http://en.cppreference.com/w/cpp/language/sfinae.
| 归档时间: |
|
| 查看次数: |
210 次 |
| 最近记录: |