函数局部静态变量是否阻止函数内联?
Does a function local static variable prevent function inlining?
我正在编写一个属性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() : "";
也可以正常工作;字符串字面值具有静态存储期限,并且一直存在到程序终止。
相关文章:
- enable_if转换构造函数(静态强制转换,is_base_of)
- 声明和定义函数静态会产生"undefined reference to function_name()"
- 有没有一种方法可以使全局函数/静态成员函数一次可呼出
- C++ - 模板类 -> 静态函数 -> 静态函数指针的链接错误
- 获取 llvm::函数静态地址
- 成员函数静态变量与成员变量
- 如何将sqlite3+扩展函数静态链接到C/C++应用程序中
- Visual Studio 2015 Natvis如何显示函数静态变量
- 返回一个指向函数静态数据的指针合适吗
- 如何将函数静态应用于非类型模板包的各个元素并对结果求和
- 是否可以通过编程方式创建函数静态对象
- 函数静态变量析构函数和线程
- 函数静态成员变量
- 隐藏模板化的辅助函数——静态成员或未命名的命名空间
- 这个解决方案对MSVC的双重检查锁定错误和函数静态有什么问题?
- 类成员函数静态和私有
- c++函数静态局部,性能好
- 函数静态变量初始化
- 使用基类中的函数静态地调用纯虚函数的派生类实现
- 使成员函数静态会使程序无法编译。想不通为什么