Я попытался найти ответ, но не уверен, что именно лучшие условия, чтобы использовать, чтобы описать это ...Я запутался об этом C++ конструктор
Я читаю книгу по программированию SFML, и один из примеры меня путают с использованием конструктора.
Допустим, что у нас есть класс A и класс B. Класс A имеет переменную-член типа B (memberB). Конструктор A выглядит следующим образом:
A::A() : OtherMemberType(with, params), memberB()
{...}
Учитывая, что memberB инициализируется с помощью конструктора по умолчанию в списке инициализации, что цель явно перечислить его в списке? Не было бы такого же эффекта без включения его в список?
Thanks
EDIT: Спасибо за ответы. Теперь я узнал (основную) разницу инициализации значения и инициализации по умолчанию.
Для больше контекста, так как идея «класса B может быть разорван воспитывался», вот пример кода из текста SFML Game Development:
class Game
{
public:Game();
void run();
private:
void processEvents();
void update();
void render();
private:
sf::RenderWindow mWindow;
sf::CircleShape mPlayer;
};
Game::Game()
: mWindow(sf::VideoMode(640, 480), "SFML Application")
, mPlayer()
{
mPlayer.setRadius(40.f);
mPlayer.setPosition(100.f, 100.f);
mPlayer.setFillColor(sf::Color::Cyan);
}
Так с этим контекстом, кто-нибудь знает некоторые из особенности SFML? Is sf :: CircleShape «сломан», или это избыточный вызов конструктора по умолчанию?
Адам
Эффект будет точно таким же. Добро пожаловать в мир C++ ... – doc
@doc: Эффект будет точно таким же для некоторых типов, но с разницей, которая может вызвать неопределенное поведение для других типов. Добро пожаловать в мир C++. –
@MikeSeymour, но поскольку 'memberB' является экземпляром' class B', то это не примитивный тип. C++ world ....: P – doc