gpt4 book ai didi

c++ - 成员函数返回值的C++ “lossy coversion”警告

转载 作者:行者123 更新时间:2023-12-02 10:22:47 25 4
gpt4 key购买 nike

将long long转换为int时,C++编译器(gcc版本4.4.7 20120313(Red Hat 4.4.7-23.0.1)(GCC))不会发出预期的警告(请参见下面的代码示例)。

// compiler: gcc version 4.4.7 20120313 (Red Hat 4.4.7-23.0.1) (GCC)
// compiled with flags -pedantic -Wextra -Wshadow -Wall -Wconversion -std=gnu++0x

#include <stdio.h>

class AConv {
public:
long long z() {
return 7634843234L;
}
void p() {
const int v = z(); // NO WARNING. WHY ? See next line which calls the same function.
const int w = this->z(); // compiler warning: conversion to 'int' from 'long long int' may alter its value
printf( "v=%d, w=%d\n", v, w); // butchered values shown
}
};

我发现这种行为违反直觉。
它是g++-仅功能吗?
我想强制编译器为两个调用生成警告,而不仅仅是第二个:

v = z();
w = this->z();

我无法升级编译器(我在有约束的公司环境中工作)。

最佳答案

在GCC世界中,-Wall不足以获取此类警告。 -Wconversion是必需的。

编辑:
https://wandbox.org/上的一些测试告诉我,GCC 4.4.7不提供此警告。提供它的第一个版本是4.7.3。

关于c++ - 成员函数返回值的C++ “lossy coversion”警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59365895/

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