当我用g++ 4.8.1(64位)以以下方式编译下面的代码时:
$ g++ -Wconversion -o main main.cpp
我得到了这个结果:
main.cpp: In function ‘int main()’:
main.cpp:12:20: warning: conversion to ‘int’ from ‘long unsigned int’ may alter its value [-Wconversion]
int i = sizeof(x)/sizeof(x[0]);
^
我希望编译器能够在编译时计算表达式的值。如果你用普通的 C 语言编写类似的程序,gcc 可以很好地工作。
这是否应该被认为是 g++ 的一个 bug(例如,clang++ 没有这个问题)?
如果你把有问题的那一行改成类似这样的代码:
char c = 0x10000000/0x1000000;
如果编译器没有抱怨,则说明在生成警告之前进行了某些常量评估。
main.cpp:
#include <iostream>
struct foo {
int a;
int b;
};
foo x[50];
int main()
{
int i = sizeof(x)/sizeof(x[0]);
std::cout << i << std::endl;
return 0;
}