函数本地静态变量是否会阻止函数内联?

时间:2011-08-18 16:37:18

标签: c++ inline

我正在编写一个属性shim来从库的字符串实现中获取原始c-string。此特定字符串类(例如string_t)包含成员length()data()length() == 0 data() == nullptr时。

现在我正在使用一个不喜欢空字符串的api,所以我的shim返回一个空字符串的地址。

inline char const* get_safe_c_str( string_t const& str ){
    static char const empty[] = "";
    return str.length() > 0 ? str.data() : ∅
}

我的静态变量是否阻止编译器内联此函数?

1 个答案:

答案 0 :(得分:4)

不,它不会阻止内联。函数本地静态变量仍然只有一个实例,并且函数在内联展开的任何地方都会使用该实例。

具有特定选项实际的特定编译器是否内联这样的函数是另一回事,您必须编译程序以查看编译器实际执行的操作,但没有技术原因函数无法内联。

但请注意,在您的计划中,return str.length() > 0 ? str.data() : "";也可以正常运行;字符串文字具有静态存储持续时间,并且在程序终止之前一直存在。