字面数字是否被视为常量?

jma*_*erx 0 c c++

PI之类的内容总是更好地#define它们或将它们声明为const,这样编译器就可以优化它,并且它变得不那么容易出错.然而,我想知道,如何对待陈述中的字面数字?例如:

float x;
const int y = 60;
x = y / 3.0f;
Run Code Online (Sandbox Code Playgroud)

在这个例子中,如何处理3.0f?它会继承常量的优化吗?

AnT*_*AnT 10

将进行哪些优化取决于编译器.在您的情况下,C和C++编译器通常都有足够的信息来将源代码优化为相同的机器代码.换句话说,它实际上并不太依赖于文字中的内容以及此代码中的常量.

话虽如此,术语文字常量的含义在C和C++中有显着差异(并且您同时标记了问题C和C++).

  • 在C 603.0f常量,但y不是一个常数.你可以调用y一个const限定的变量,如果你愿意的话,但它不是一个固定在C语言术语,在某种意义上说,一个y不是一个常量表达式中C.

至于文字,在C语言中,术语" 文字"仅适用于字符串文字(以及C99中的复合文字),即根本不存在代码中的文字.

  • 在C++中,60并且3.0.f文字,其形成常量表达式(积分和分别浮-点).y也是恒定int类型,在某种意义上,单一y是一个常量表达式在C++中.

您可能注意到差异的情况与优化无关,而是与语言的定义方式无关.例如,y在文件范围数组类型声明中使用上述内容在C++中是合法的,但在C中则不合法

 typedef int int_array[y]; /* OK in C++, ERROR in C */
Run Code Online (Sandbox Code Playgroud)