выше ответ для меня, я попробовал изменить litte, я объявляю стиль для класса в элементе ресурсов.
<declare-styleable name="VerticalView">
<attr name="textSize" format="dimension" />
<attr name="textColor" format="color" />
<attr name="textBold" format="boolean" />
</declare-styleable>
в declare-styleable, атрибут name ссылается на имя класса, поэтому У меня был вызов класса вида «com.my.package.name.VerticalView», он представлял, что это объявление должно использоваться в VerticalView или подклассах VerticalView. поэтому мы можем объявить стиль следующим образом:
<resources>
<style name="verticalViewStyle">
<item name="android:layout_width">match_parent</item>
<item name="android:layout_height">36dip</item>
<item name="textSize">28sp</item> <!-- not namespace prefix -->
<item name="textColor">#ff666666</item>
<item name="textBold">true</item>
</style>
</resources>
, поэтому мы не объявили пространство имен в элементе ресурсов, оно все еще работает.
Не разрешается привязывать временную ссылку к неконстантной ссылке, но если вы сделаете свою ссылку постоянной, вы продлите время жизни временной ссылки до ссылки, см. этот пост Дэнни Калева об этом .
Короче говоря:
const A& mySecondObject = myFunction();
Это возможно с константной ссылкой.
myFunction
возвращает значение, поэтому возвращаемое значение является временным объектом. Вы можете привязать временную ссылку к константной ссылке, и время жизни временной привязки увеличивается до времени жизни ссылки. Вы не можете привязать временную ссылку к неконстантной ссылке (к сожалению).
Возвращаемое значение myFunction
может быть копией из myObject
. С положительной стороны, elision конструктора копирования (в данном случае называемого «оптимизацией именованного возвращаемого значения») позволяет компилятору напрямую создавать myObject
во временное значение, которое является возвращаемым значением myFunction
, предположительно расположенным где-то в стеке вызывающий код. Если это так, то когда myObject
выходит из области видимости, объект фактически не уничтожается. Оптимизация обычно реализуется - например, GCC (обычно?) Делает это даже без каких-либо флагов оптимизации.
Копирование ctor elision также позволяет компилятору избегать любого копирования, если вы это сделали:
A mySecondObject = myFunction();
Это требует применения обоих допустимых типов копирования ctor elision: (1) возврат именованного значения из функции и (2) инициализация объекта из временного.
Возможно, вас заинтересует оптимизация возврата по значению , которую делают многие компиляторы, чтобы избежать вызова конструктора копирования.