3.5.4. 读/写常数

外部常数的链接说明指示,常数可以动态初始化或具有可变成员。

Note

使用 "C++:read/write" 链接仅对通过 --apcs /rwpi 编译的代码是必需的。 如果使用此选项重新编译现有代码,则必须更改动态初始化或具有可变成员的外部常数的链接说明。

使用 --apcs /rwpi 选项编译 C++ 不符合 ISO C++ 标准。 Example 3.1 中的声明假定 x 在只读段中。

Example 3.1. 外部访问


extern const T x;

extern "C++" const T x;

extern "C" const T x;

无法为常数动态初始化 x(包括用户定义的构造函数),并且 T 不能包含可变成员。 Example 3.2中的新链接说明声明 x 位于读/写段中,即使使用常数对其初始化。 允许动态初始化 x,并且 T 可以包含可变成员。 其他文件中的 xyz 定义必须具有相同的链接说明。

Example 3.2. 链接说明


extern const int z;                   /* in read-only segment, cannot  */	

                                      /* be dynamically initialized    */	



extern "C++:read/write" const int y;  /* in read/write segment */	

                                      /* can be dynamically initialized */	

extern "C++:read/write"

{	

    const int i=5;                    /* placed in read-only segment, */	

                                      /* not extern because implicitly static */	

    extern const T x=6;               /* placed in read/write segment */	

    struct S

    {	

        static const T T x;           /* placed in read/write segment */	

    };	

}

不能使用其他链接重新声明常数对象。 Example 3.3 中的代码生成编译器错误。

Example 3.3. 编译器错误


extern "C++"  const T x;

extern "C++:read/write"  const T x; /* error */

Note

由于 C 没有链接说明,因此,不能将 C++ 中声明的 const 对象用作来自 C 的 extern "C++:read/write"

另请参阅

Copyright © 2007 ARM Limited. All rights reserved. ARM DUI 0348AC
Non-Confidential