Я хочу знать, можно ли компилятору выпустить предупреждение/ошибку для кода следующим образом:
Примечание:
1. Да, это плохой стиль программирования, и мы должны избегать таких случаев - но мы имеем дело с устаревшим кодом, и компилятор надежды может помочь идентифицировать такие случаи для нас.)
2. Я предпочитаю вариант компилятора (VС++), чтобы отключить или разрезать срез объектов, если он есть.
class Base{};
class Derived: public Base{};
void Func(Base)
{
}
//void Func(Derived)
//{
//
//}
//main
Func(Derived());
Здесь, если я прокомментирую вторую функцию, вызывается первая функция - и компилятор (как VС++, так и Gcc) чувствует себя комфортно с этим.
Является ли это стандартом С++? и могу ли я попросить компилятор (VС++) дать мне предупреждение, когда встретил такой код?
Спасибо большое!
Edit:
Спасибо всем за вашу помощь!
Я не могу найти параметр компилятора, чтобы дать сообщение об ошибке/предупреждении - я даже разместил это в форуме MSDN для консультанта компилятора VС++ без ответа. Поэтому я боюсь, что никакая функция gcc и vС++ не реализовала эту функцию.
Поэтому добавить конструктор, который будет принимать производные классы как paramter, будет лучшим решением на данный момент.
Edit
Я передаю feedbak для MS и надеюсь, что они исправит его в ближайшее время:
https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=421579
-Baiyan