C++:禁用隐式转换警告

Posted

技术标签:

【中文标题】C++:禁用隐式转换警告【英文标题】:C++: disable implicit conversion warnings 【发布时间】:2020-05-12 09:26:53 【问题描述】:

我正在使用 MSVC,但为其他主要编译器提及正确的标志将是一个加分项。我需要这些标志只是为了实验目的。这些是我所指的警告的一些示例:

warning C4244: '=': conversion from 'T' to 'int', possible loss of data

warning C4244: '=': conversion from 'double' to 'Uint8', possible loss of data

warning C4244: 'argument': conversion from 'U' to 'T', possible loss of data

warning C4267: 'return': conversion from 'size_t' to 'int', possible loss of data

warning C4244: 'argument': conversion from 'float' to 'T', possible loss of data

warning C4244: 'initializing': conversion from 'float' to 'T', possible loss of data

warning C4838: conversion from 'float' to 'T' requires a narrowing conversion

【问题讨论】:

你想要一些编译器的标志吗? 是的,如果我没有误解你的问题 你可以找到一些信息there。 您应该在代码中解决这些问题,而不是让警告静音。 错误,告诉你这是一个阻止代码编译的语法问题,警告告诉你潜在的问题,这可能会使程序在运行时行为异常。您不应禁用有关隐式转换的警告,而应禁用有效的显式转换。 【参考方案1】:

如果您想消除错误,您可以按照the official documention 中的说明进行操作。 MSVC 有警告级别,每个警告都分配给一个级别。因此,您要么更改应报告的级别,将特定警告分配给不同级别,要么使特定警告保持沉默。

/wdnnnn 将消除错误 nnnn 是警告编号。 /wxnnnn 更改警告级别 x 是新级别,nnnn 是警告编号。

或者您可以使用#pragma在文件基础上执行此操作

但是每次转换都没有标记,您必须手动为每个Cnnnn 进行标记。

【讨论】:

以上是关于C++:禁用隐式转换警告的主要内容,如果未能解决你的问题,请参考以下文章

为啥 GCC 会警告这种隐式转换?

警告:隐式转换在 xcode 6 中会丢失整数精度

警告:从枚举类型“UIInterfaceOrientation”到不同枚举类型“UIDeviceOrientation”的隐式转换?

Android Studio 警告整数乘法隐式转换为 long。如何解决这个问题?

抑制从 void ** 到另一个 ** 的隐式类型转换的警告的方法?

C++,bool 转换是不是总是退回到 void* 的隐式转换?