c++ - 为什么 C++ 在将 float 转换为 char 时不显示缩小转换错误?

标签 c++ gcc narrowing

使用 g++ -std=c++17 -Wall -pedantic main.cpp 编译此代码不会产生任何警告:

#include <iostream>
#include <stdlib.h>

int main(int argc, char const *argv[]) {
  for (int i = 0; i < 100; ++i) {
    float x = 300.0 + rand();
    char c = x;
    std::cout << c << std::endl;
  }

  return 0;
}

它不应该产生缩小误差吗?

最佳答案

我做了一些研究,发现 -Wall 不会警告类型转换问题。

相反,使用标志 -Wconversion 以获得有关潜在类型转换问题的警告。

备注:

对于VC++的用户,/W4会在类型转换时警告你可能丢失数据

关于c++ - 为什么 C++ 在将 float 转换为 char 时不显示缩小转换错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52443036/

相关文章:

java - Java中的隐式转换如何工作?

c++ - fwrite, fread - fread 的问题

c++ - boost编译标志iw是什么意思?

c# - 为什么在 C++ 中,dynamic_cast 被认为是不好的做法?

r - Conda 构建 R 包在 MacOS Mojave 上的 C 编译器问题上失败

linux - ghc 不工作因为缺少 "Rts.h"

c++ - P0960,在 c++20 中是否有任何类型的机制来检测新聚合 init 中是否有 ()s 缩小?

c++ - 是否有 "safe"static_cast 替代方案?

c++ - 构建错误,cmake,制作共享对象时无法使用;使用 -fPIC 重新编译

c - GCC 返回优化