c++ - 关于使用 std::strtoul 将 std::string 转换为 unsigned short 的警告。有更好的选择吗?

标签 c++ gcc clang c++14

我在 clanggcc 上使用 C++ 14。我有一个 std::string,我需要将其转换为 unsigned short 我正在按照以下方式进行操作。

unsigned short u_var = 1234;  //some default value
std::string str = "5678";      //some default value

u_var = (unsigned short) std::strtoul(str.c_str(), NULL, 0);

我从 here 找到了这个.

但是,我在执行此操作时收到以下警告

Semantic issue
warning: use of old-style cast

clanggcc 都会出现警告。 我做的有什么问题吗?有没有更好的方法可以在没有任何风险或警告的情况下执行此操作?

同时查看类型转换方法列表here ,似乎没有可用于 std::stringunsigned short 的转换选项。

最佳答案

问题出在 C 风格的转换上(它们有点冒险)。请改用 static_cast。喜欢:

u_var = static_cast< unsigned short >( std::strtoul(str.c_str(), NULL, 0) );

我也会使用 std::stoul 而不是 std::strtoul,如果可能的话(它是 C++11)

关于c++ - 关于使用 std::strtoul 将 std::string 转换为 unsigned short 的警告。有更好的选择吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41443581/

相关文章:

c++ - 两个类之间的交叉访问

c++ - C++ 中带有 new 关键字的二维结构数组!

c++ - C/C++ 中的非保留字符

c++ - C++中的抽象类和纯虚方法

c++ - gcc 问题 - 没有匹配的函数调用

c - gcc(windows + MinGW) 是否在 inttypes.h 中定义了 SCNd8、SCNu8?

c++ - 如何将 clang-tidy 集成到 CMake 和 GCC?

c++ - 数字常量之前的预期非限定 ID

c - 如何强制 C 编译器在用 void* 声明时用 long 参数定义函数

ios - Swift 和 Objective-c 框架公开其内部结构