gpt4 book ai didi

c++ - 当 double 为常量时,为什么 g++ -Wconversion 不警告将 double 转换为 long int?

转载 作者:太空狗 更新时间:2023-10-29 20:59:26 26 4
gpt4 key购买 nike

如果我将 double 传递给需要 long 的函数,g++ 会警告转换问题,但如果我将 const double 传递给需要 long 的函数,g++ 会很高兴。警告如下:

warning: conversion to ‘long int’ from ‘double’ may alter its value [-Wconversion]

无论我传递的是 double 还是 const double,我都希望 g++ 给我一个警告。我该怎么做?

我有生成文件和一些您可以运行的代码。我喜欢尽可能多地打开警告,但也许其中一个正在隐式关闭另一个?我不确定。

这是生成文件:

WARNOPTS=-Wall -Wextra -pedantic \
-Wdouble-promotion -Wformat=2 -Winit-self \
-Wmissing-include-dirs -Wswitch-default -Wswitch-enum \
-Wundef -Wunused-function -Wunused-parameter \
-Wno-endif-labels -Wshadow \
-Wpointer-arith \
-Wcast-qual -Wcast-align \
-Wconversion \
-Wsign-conversion -Wlogical-op \
-Wmissing-declarations -Wredundant-decls \
-Wctor-dtor-privacy \
-Wnarrowing -Wnoexcept -Wstrict-null-sentinel \
-Woverloaded-virtual \
-Wsign-compare -Wsign-promo -Weffc++


BUILD := develop
cxxflags.develop := -g $(WARNOPTS)
cxxflags.release :=
CXXFLAGS := ${cxxflags.${BUILD}}

foo: foo.cpp
g++ $(CXXFLAGS) -o $@ $^

这是 foo.cpp:

// foo.cpp

#include <iostream>
#include <string>

using namespace std;

const double WAITTIME = 15; // no warning on function call
//double WAITTIME = 15; // warning on function call

bool funcl( long time);


bool funcl( long time ) {
cout << "time = " << time << endl;
return true;
}





int main() {
string rmssg;

funcl( WAITTIME );
return 0;
}

这是我使用的 g++ 版本:

g++ --version
g++ (Debian 4.7.2-5) 4.7.2

感谢您的帮助!

最佳答案

如果我们查看 Wconversion wiki,这看起来像是 gcc 的设计决定,它说:

[...]The option should not warn for explicit conversions or for cases where the value cannot in fact change despite the implicit conversion.

如果我们查看此代码的程序集,我们可以看到 gcc 实际上使用的是常量值 15 而不是变量,这意味着它也在执行常量折叠

关于c++ - 当 double 为常量时,为什么 g++ -Wconversion 不警告将 double 转换为 long int?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24677505/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com