在c++ gcc中使用static_cast时如何产生警告?

jchrr9hc  于 2023-08-06  发布在  其他
关注(0)|答案(2)|浏览(116)

我需要从项目中删除static_cast的使用,如果添加static_cast,则阻止正常编译,gcc文档没有说明如何在使用static_cast时启用警告。
我在gcc文档中搜索了static_cast关键字,但没有找到任何合适的内容。

sycxhyv7

sycxhyv71#

我非常怀疑是否有任何编译器设置。static_cast是要使用的语言的一个完全正常的特性,并且是优于C风格显式强制转换的首选方式。目前尚不清楚这样的警告有何作用。事实上,static_cast通常用于告诉编译器不要警告可能有问题的隐式转换,如收缩转换。
有一个clang-tidy检查cppcoreguidelines-pro-type-static-cast-downcast来警告使用static_cast是向下转换(这可能导致UB,核心指南建议用dynamic_cast替换)。
也许还有一些clang-tidy检查或类似的检查,如果static_cast转换也可以隐式地进行,则会发出警告,但这可能会干扰上面提到的约定。
您可能需要使用外部工具。像grep -R static_assert .或一些sed/awk这样简单的东西以您想要的方式替换static_assert的使用可能就足够了。如果你真的需要修改解析后的AST,你可能需要写一些东西,例如:基于Clang的库/工具。

bq3bfh9z

bq3bfh9z2#

它可以被#define阻止。
这将生成编译错误

#define static_cast
int main()
{
    int x = static_cast<int> (3.14);
}

字符串

相关问题