Следующие два утверждения семантически одинаковы? - PullRequest
1 голос
/ 17 марта 2010

Семантически ли следующие два утверждения одинаковы?

# 1 person p("Rahul", 20);

# 2 person const &p = person("Rahul", 20);

EDIT:

Извините, я хотел спросить, семантически ли следующие два:

# 1 person const p("Rahul", 20);

# 2 person const &p = person("Rahul", 20);

Ответы [ 2 ]

5 голосов
/ 17 марта 2010

Нет, они не. То, как ведет себя р в каждом случае, отличается. Например, в последнем случае вы не могли бы сказать:

p.rename( "fred" );

при условии, что у человека есть метод rename ().

Конечно, если ваш первый экземпляр был:

const person p("Rahul", 20);

эти два были бы намного более похожими. Я надеюсь, что вы не собираетесь использовать ссылки для всех ваших «переменных»: -)

2 голосов
/ 17 марта 2010

Это не так. Однако на разницу влияет только тот факт, что во втором случае нужен конструктор копирования, чтобы он был доступен в C ++ 03 (даже если вызов конструктора копирования фактически не выполняется)

// works with #1 fails with #2
struct f1 { f1(string, int); private: f1(f1 const&); };
...