我正在编写一个属性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() : ∅
}
我的静态变量是否阻止编译器内联此函数?
答案 0 :(得分:4)
不,它不会阻止内联。函数本地静态变量仍然只有一个实例,并且函数在内联展开的任何地方都会使用该实例。
具有特定选项实际的特定编译器是否内联这样的函数是另一回事,您必须编译程序以查看编译器实际执行的操作,但没有技术原因函数无法内联。
但请注意,在您的计划中,return str.length() > 0 ? str.data() : "";
也可以正常运行;字符串文字具有静态存储持续时间,并且在程序终止之前一直存在。