在函数外部调用函数

时间:2015-11-16 02:19:17

标签: c++

我有这段代码:

std::string* f()
{
  cout << "1";
  return new string("5");
}
std::string a = *f();
std::string b = a.append("2");

int main()
{
  cout << b;
  return 0;
}

此代码运行并返回152

怎么可能?如果编译器在编译时计算其返回字符串的值,那么在运行代码时我怎么看1?如果这是在运行时完成的,那么我在运行时从不调用f(),所以我不应该在输出中看到1

2 个答案:

答案 0 :(得分:1)

你说:

  

如果编译器在编译时计算其返回字符串的值

这是不正确的。编译器可以在编译时计算一些表达式,但不能计算所有表达式。在这种情况下,它只能在运行时计算。

cout << "1";
当您致电f()以使用

行初始化a时,会执行

std::string a = *f();

这在运行时发生。不是在编译时。

使用b的值

初始化

a

std::string b = a.append("2");

这也发生在运行时,而不是在编译时。

答案 1 :(得分:-1)

您的示例代码打印&#34; 1&#34;当全局变量a用&#34; 5&#34;初始化,然后用&#34; 52&#34;初始化全局变量b后,即main()运行时。所以完整的输出是&#34; 1&#34;然后是&#34; 52&#34;。

请注意,函数f()确实被调用,而不是来自main(),而是来自全局变量a的初始化器。