Когда речь идет о типах классов, при создании временного типа const этот временный будет const. И когда вы создаете временный неконстантный тип, он будет неконстантным. Вот и все. То есть Что касается точного типа, то здесь вообще нет связи между const и временными. Временный тип класса никогда не принимает const сам по себе. Это вы можете явно навязать ему const.
В вашем примере, nether X(3)
и X(4)
не являются постоянными. Поскольку X(3)
не является константой, вы можете вызвать неконстантный метод для него.
Неправильно говорить, что ваш X(4)
"ведет себя как const". Нет никаких признаков того, что он "ведет себя как постоянный" в вашем примере. То, что вы смогли инициализировать константную ссылку чем-то, не означает, что это константное что-то.
В своем вопросе вы утверждаете, что вам "нужен аргумент const в operator+
". Это неверно Вам не нужен const аргумент в вашем operator+
. Ваш параметр x
объявлен как постоянная ссылка. Ссылка на const может быть легко связана с аргументами const, а также с неконстантными аргументами. В вашем случае параметр константной ссылки x
связан с неконстантным временным аргументом X(4)
.