函数局部静态变量是否阻止函数内联?

Does a function local static variable prevent function inlining?

本文关键字:函数 静态 变量 是否 函数局      更新时间:2023-10-16

我正在编写一个属性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() : ∅
}

我的静态变量阻止编译器内联这个函数吗?

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

具有特定选项的特定编译器是否真的内联了这样的函数是另一回事,您必须编译您的程序以查看编译器实际做了什么,但是没有技术上的原因使函数不能内联。但是,请注意,在您的程序中,return str.length() > 0 ? str.data() : "";也可以正常工作;字符串字面值具有静态存储期限,并且一直存在到程序终止。