Я нашел это странное поведение с компилятором VS2005 C++. Вот так:Константный параметр в конструкторе вызывает stackoverflow
Я не могу опубликовать код, но ситуация очень проста.
Вот исходный код: он работает отлично
class Foo {
public:
Foo(Bar &bar) { ... }
}
Конструктор реализация сохраняет ссылку, настройки некоторых членов ... действительно ничего особенного.
Если изменить код следующим образом:
class Foo {
public:
Foo(const Bar &bar) { ... }
}
я добавил константный спецификатора единственным параметром конструктора рутинного.
Он компилируется правильно, но компилятор выводит предупреждение о том, что подпрограмма Foo :: Foo вызовет stackoverflow (даже если путь выполнения не создает объект Foo); эффективно это происходит.
Итак, почему код без сопзЬ параметра отлично работает, в то время как один с Const классификатором вызывает StackOverflow? Что может вызвать это странное поведение?
Вам нужно размещать как код и предупреждение компилятора вы получаете. – 2010-05-29 08:53:14
Невозможно рассказать об этой информации. Нам нужна намного больше информации или минимальный фрагмент кода, с помощью которого можно воспроизвести предупреждение – Naveen
Действительно? У меня VS2005 с версией 15.00.30729.01 компилятора C++, и оба фрагмента кода (с помощью 'class Bar {};') не дают мне никаких предупреждений о переполнении стека даже на самом высоком уровне предупреждения. Я что-то упускаю? –