将 unsigned 转换为 complex<int> 会导致符号转换警告
casting unsigned to complex<int> causes sign-conversion warning
考虑以下代码:
#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
的构造。
对于 'fix' 你的例子你应该改为:
auto result = std::complex<int>{static_cast<int>(u)};
考虑以下代码:
#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
的构造。
对于 'fix' 你的例子你应该改为:
auto result = std::complex<int>{static_cast<int>(u)};