.. _stdlib_safe_addr: =============== safe_addr macro =============== .. include:: detail/safe_addr.rst safe_addr 模块实现了 safe_addr 模式,它返回本地表达式的临时地址。 所有函数和符号都在 safe_addr 模块中,使用 require 可以访问该模块。 :: require daslib/safe_addr ++++++++++++++++++++ 函数注释 ++++++++++++++++++++ .. _handle-safe_addr-SafeAddrMacro: .. das:attribute:: SafeAddrMacro 如果在对象上尝试使用 safe_addr,而该对象不是作用域的本地对象,则该宏会报错。 也就是说,如果对象在作用域中可以通过删除、垃圾回收或在 C++ 端 “过期”。 .. _handle-safe_addr-SharedAddrMacro: .. das:attribute:: SharedAddrMacro 如果尝试对共享全局变量以外的任何内容进行shared_addr,则此宏将报告错误。 即,只有全局变量可以安全地与 shared_addr 一起使用。 ++++++++++++++++++++++ 安全的临时地址 ++++++++++++++++++++++ * :ref:`safe_addr (x:auto(T)& ==const -const) : T -&?# ` * :ref:`safe_addr (x:auto(T) const& ==const) : T -&? const# ` * :ref:`shared_addr (tab:table\ const;k:KEY const) : auto ` * :ref:`shared_addr (val:auto(VALUE) const&) : auto ` .. _function-_at_safe_addr_c__c_safe_addr_&_eq_Y_ls_T_gr_.: .. das:function:: safe_addr(x: auto(T)& ==const) safe_addr returns T?# +--------+-------------+ +argument+argument type+ +========+=============+ +x +auto(T)&! + +--------+-------------+ 返回指向给定 expressio 的临时指针 .. _function-_at_safe_addr_c__c_safe_addr_C&_eq_Y_ls_T_gr_.: .. das:function:: safe_addr(x: auto(T) const& ==const) safe_addr returns T? const# +--------+---------------+ +argument+argument type + +========+===============+ +x +auto(T) const&!+ +--------+---------------+ 返回指向给定表达式的临时指针 .. _function-_at_safe_addr_c__c_shared_addr_C1_ls_Y_ls_KEY_gr_._gr_2_ls_Y_ls_VAL_gr_._gr_T_CY_ls_KEY_gr_L: .. das:function:: shared_addr(tab: table const; k: KEY const) shared_addr returns auto +--------+--------------------------------+ +argument+argument type + +========+================================+ +tab +table const+ +--------+--------------------------------+ +k +KEY const + +--------+--------------------------------+ 返回给定共享变量的地址。这是安全的,因为共享变量永远不会超出范围 .. _function-_at_safe_addr_c__c_shared_addr_C&Y_ls_VALUE_gr_.: .. das:function:: shared_addr(val: auto(VALUE) const&) shared_addr returns auto +--------+------------------+ +argument+argument type + +========+==================+ +val +auto(VALUE) const&+ +--------+------------------+ 返回给定共享变量的地址。这是安全的,因为共享变量永远不会超出范围 ++++++++++++++++++ 临时指针 ++++++++++++++++++ * :ref:`temp_ptr (x:auto(T)? const implicit ==const) : T? const# ` * :ref:`temp_ptr (x:auto(T)? implicit ==const -const) : T?# ` .. _function-_at_safe_addr_c__c_temp_ptr_CI_eq_1_ls_Y_ls_T_gr_._gr__qm_: .. das:function:: temp_ptr(x: auto(T)? const implicit ==const) temp_ptr returns T? const# +--------+------------------------+ +argument+argument type + +========+========================+ +x +auto(T)? const implicit!+ +--------+------------------------+ 从给定指针返回临时指针 .. _function-_at_safe_addr_c__c_temp_ptr_I_eq_1_ls_Y_ls_T_gr_._gr__qm_: .. das:function:: temp_ptr(x: auto(T)? implicit ==const) temp_ptr returns T?# +--------+------------------+ +argument+argument type + +========+==================+ +x +auto(T)? implicit!+ +--------+------------------+ 从给定指针返回临时指针