c++ - 将无符号转换为复杂导致符号转换警告
问题描述
考虑以下代码:
#include <complex>
int main()
{
unsigned u = 1u;
auto result = static_cast<std::complex<int>>(u);
return 0;
}
编译
g++ -std=c++11 -Werror -Wsign-conversion -o a.out source_file.cpp
导致编译错误
source_file.cpp: In function ‘int main()’:
source_file.cpp:8:51: error: conversion to ‘int’ from ‘unsigned int’ may change the sign of the result [-Werror=sign-conversion]
auto result = static_cast<std::complex<int>>(u);
^
clang 报告了类似的错误
source_file.cpp:6:50: error: implicit conversion changes signedness: 'unsigned int' to 'const value_type' (aka 'const int') [-Werror,-Wsign-conversion]
auto result = static_cast<std::complex<int>>(u);
~~~~~~~~~~~ ^
乍一看,这个错误没有多大意义,我错过了什么?
解决方案
您收到的转换警告不是来自演员阵容,而是来自std::complex
.
要“修复”您的示例,您应该这样做:
auto result = std::complex<int>{static_cast<int>(u)};
推荐阅读
- c# - 如何在推送到 Azure DevOps 拉取请求中的私有源之前正确检查构建策略中的 NuGet 包版本是否重复
- javascript - 如何为列表中的每个标记创建单独的侦听器
- excel - VBA Excel:消息框和非英文单词
- r - R:根据模式更改列名
- windows - 在 Mac 和 Windows 上渲染 Markdown
- javascript - 为什么我无法替换 iframe 中的文本?
- android - SaveStateHandle ViewModel:保存接口(回调)
- php - 使用 php 和 mysql where 子句填充下拉列表不起作用
- go - 我不能在 Go 中使用指向接口类型的指针吗?
- next.js - 下一个 Image 组件在生产中抛出 404 错误,在开发中工作正常