Oracle Solaris Studio 12.2:C++ 用户指南

A.2.18 –features=a[,a...]

启用/禁用逗号分隔的列表中指定的各种 C++ 语言功能。

A.2.18.1 值

在兼容模式 (-compat[=4]) 和标准模式(缺省模式)下,a 都可以具有以下值:

表 A–5 兼容模式和标准模式下的 -features

值 

含义  

%all

在指定模式(兼容模式或标准模式)下有效的所有 -features 选项。

[no%]altspell

[不] 识别替用的标记拼写(例如,"and" 代替 "&&")。在兼容模式下缺省值为 no%altspell,在标准模式下缺省值为 altspell

[no%]anachronisms

[不] 允许过时的构造。禁用时(即 -features=no%anachronisms),不允许使用任何过时构造。缺省值为 anachronisms

[no%]bool

[不] 允许 bool 类型和文字。启用时,宏为 _BOOL=1。未启用时,不定义宏。在兼容模式下,缺省值为 no%bool,在标准模式下,缺省值为 bool

[no%]conststrings

[不] 将文字字符串放入只读存储器中。在兼容模式下,缺省值为 no%conststrings,在标准模式下,缺省值为 conststrings

[no%]except

[不] 允许 C++ 异常。C++ 异常处于禁用状态时(即 -features=no%except),接受但忽略函数的抛出规范,编译器不生成异常代码。请注意,通常保留关键字 trythrowcatch。请参见8.3 禁用异常。缺省值为 except

[no%]export

[不] 识别关键字 export。在兼容模式下,缺省值为 no%export,在标准模式下,缺省值为 export。此功能尚未实现,但可以识别 export 关键字。

[no%]extensions

[不] 允许其他 C++ 编译器通常接受的非标准代码。缺省值为 no%extensions

[no%]iddollar

[不] 允许 $ 符号作为非首字母标识符字符。缺省值为 no%iddollar

[no%]localfor

[不] 对 for 语句使用符合新标准的局部作用域规则。在兼容模式下,缺省值为 no%localfor,在标准模式下,缺省值为 localfor

[no%]mutable

[不] 识别关键字 mutable。在兼容模式下,缺省值为 no%mutable,在标准模式下,缺省值为 mutable

[no%]nestedacess

(仅限于标准模式)[不] 允许嵌套类访问包容类的专有成员。缺省值:-features=nestedaccess

[no%]rvalueref

[不] 允许将非常量引用绑定到 rvalue 或 temporary。缺省值:-features=no%rvalueref

缺省情况下,C++ 强制执行非常量引用不能绑定到 temporary 或 rvalue 的规则。要覆盖此规则,请使用选项 -features=rvalueref

[no%]split_init

[不] 将非局部静态对象的初始化函数放入个别函数中。使用 -features=no%split_init 时,编译器将所有初始化函数放入一个函数中。使用 -features=no%split_init 可最大限度减小代码大小,但编译时间可能增加。缺省值为 split_init

[no%]transitions

[不] 允许 ARM 语言构造,该构造会在标准 C++ 下产生问题,且可能使程序无法按预期工作或以后可能不能编译。使用 -features=no%transitions 时,编译器会将这些情况视为错误。在标准模式下使用 -features=transitions 时,编译器会发出关于这些构造的警告,而不是错误消息。在兼容模式 (-compat[=4]) 下使用 -features=transitions 时,编译器仅在指定了 +w+w2 的情况下才显示有关这些构造的警告。以下构造视为转换错误:在使用了模板后再重新定义模板,遗漏模板定义中所需的 typename 指令,以及隐式声明类型 int。在以后的发行版本中可能会更改转换错误的集合。缺省值为 transitions

%none

关闭指定模式中可以关闭的所有功能。 

在标准模式(缺省模式)下,a 可以有下列其他值:

表 A–6 仅适用于标准模式的 -features

值 

含义  

[no%]strictdestrorder

[不] 遵循由 C++ 标准指定的要求,该要求关于具有静态存储持续时间对象的析构顺序。缺省值为 strictdestrorder

[no%]tmplrefstatic

[不] 允许函数模板引用相关静态函数或静态函数模板。缺省值是遵循标准的 no%tmplrefstatic

[no%]tmplife

[不] 清除由位于全表达式结尾处的表达式(在 ANSI/ISO C++ 标准中定义)创建的临时对象。(-features=no%tmplife 生效时,多数临时对象会在其块终结时清除。)在 compat=4 模式下,缺省值为 no%tmplife,在标准模式下,缺省值为 tmplife

在兼容模式 (-compat[=4]) 下,a 可以有下列其他值。

表 A–7 仅适用于兼容模式的 -features

值 

含义  

[no%]arraynew

[不] 识别数组形式的运算符 new 和 delete(如 operator new [ ] (void*))。启用时,宏为 __ARRAYNEW=1。未启用时,不定义宏。缺省值为 no%arraynew

[no%]explicit

[不] 识别关键字 explicit。缺省值为 no%explicit

[no%]namespace

[不] 识别关键字 namespaceusing。缺省值为 no%namespace

使用 -features=namespace 是为了协助将代码转换到标准模式。通过启用该选项,将这些关键字作为标识符使用时就会出现错误消息。关键字识别选项使您能够使用增加的关键字,而不必在标准模式下进行编译。

[no%]rtti

[不] 允许运行时类型信息 (RTTI)。必须启用 RTTI 才能使用 dynamic_cast<>typeid 运算符。在 -compat=4 模式下,缺省值为 no%rtti。其他情况下,缺省值为 -features=rtti,此时不允许使用选项 -features=no%rtti


注 –

允许使用 [no%]castop 设置,以便与针对 C++ 4.2 编译器编写的 makefile 兼容,但对更高的编译器版本没有影响。新式强制类型转换(const_castdynamic_castreinterpret_caststatic_cast)总是会被识别且无法禁用。


缺省值

如果未指定 –features,兼容模式 (-compat[=4]) 下的缺省值为:


-features=%none,anachronisms,except,split_init,transitions

在缺省的“标准模式”下:


-features=%all,no%altspell,no%bool,no%conststrings,no%extensions,no%iddollar,\ 
              no%rvalueref,no%tmplrefstatic

采用上文。

交互

该选项会累积而不覆盖。

在标准模式(缺省)中以下选项与标准库和头文件不兼容:

在兼容模式 (-compat[=4]) 下,-features=transitions 选项不起作用,除非指定了 +w 选项或 +w2 选项。

警告

指定 -features=%all-features=%none 时务必谨慎。features 的设置可能会随每个编译器发行版和补丁程序而发生变化。从而可能会有一些您不希望获得的程序行为发生。

使用 -features=tmplife 选项时,程序的行为可能会发生变化。测试在使用与不使用 -features=tmplife 选项两种情况下程序是否正常运行是一种测试程序可移植性的方法。

在兼容模式 (-compt=4) 下,编译器会在缺省情况下假定 -features=split_init。如果使用 -features=%none 选项禁用其他功能,就会发现需要改用 -features=%none,split_init 重新将初始化函数分到单独的函数中。

另请参见

表 3–17 和《C++ 迁移指南