c++ - 解释期中 C++ 的示例

标签 c++

我的老师刚刚将此作为即将到来的 C++ 期中考试的几个程序示例之一。代码是:

//What does this program print?

#include <iostream>
using namespace std;

#define foo1( a )  a * a

int j = 6;

inline  int
foo2( int a ) 
{
    return a * a;
}

void
goo1( int& x )
{
    x = 3;
}

void
goo2( int  x )
{
    x = 3;
}

int main()
{
    int i, j = 12;

    cout << "foo1 = " << foo1( 3 + 2 ) << "\n";
    cout << "foo2 = " << foo2( 3 + 2 ) << "\n";

    i = 5;
    goo1( i );
    cout << "goo1 = " << i << "\n";
    i = 5;
    goo2( i );
    cout << "goo2 = " << i << "\n";

    cout << "  j = " <<   j << "\n";
    cout << "::j = " << ::j << "\n";
}

谁能解释一下 foo1 = 11 是如何产生的。我已经用不同的数字进行了一个小时的试验,但我无法确切地理解它是如何计算出来的。

最佳答案

foo1 是一个宏。宏执行严格的查找和替换,因此 foo1(3+2) 被替换为 3+2*3+2。 按照运算顺序,3+2*3+2 = 3+6+2 = 11。

关于c++ - 解释期中 C++ 的示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16456791/

相关文章:

c++ - 程序运行到一半就停止了?

c++ - 查找 boost 多精度 uint512_t 的第一组指令 (ffs)

c++ - 我有一个应该打印数组的函数,但由于某种原因它不起作用

python - C++ 的 SWIG,未找到符号 : Expected in: flat namespace

c++ - 运行时等待输入

c++ - CMake C++ 库链接

c++ - FFMPEG。读取帧,处理它,把它输出视频。复制声音流不变

c++ - 使用 std::vector 缓冲区的高效输入处理

c++ - 将对象作为参数传递

c++ - 模板参数和它自己的模板参数都包含同名类型;如何在函数签名中引用第二个?