Gotw 80 включает в себя следующий пример:
// Example 1
//
#include <string>
using namespace std;
class A
{
public:
A( const string& s ) { /* ... */ }
string f() { return "hello, world"; }
};
class B : public A
{
public:
B() : A( s = f() ) {}
private:
string s;
};
int main()
{
B b;
}
В статье обсуждается, почему строка s = f()
неверна - из-за времени жизни объекта и порядка строительства. В статье говорится, что в то время ошибка не была обнаружена компилятором.
Однако, игнорируя проблемы порядка инициализации и времени жизни объекта, я не вижу, как s = f()
в списке параметров конструктора может быть синтаксически допустимым - похоже, он пытается инициализировать член в списке параметров (или, возможно, объявление значения по умолчанию). Кто-нибудь может объяснить, что пытается делать этот синтаксис?