这里是来自C++问答中的代码示例:
#include <iostream>
struct X {
X(const char *) { std::cout << 1; }
X(const X &) { std::cout << 2; }
X(X &&) { std::cout << 3; }
};
X f(X a) {
return a;
}
X g(const char * b) {
X c(b);
return c;
}
int main() {
f("hello");
g("hello");
}
这个程序的输出将会是什么?
我认为:
- 调用了
f(X a)
, 构造函数隐式地将const char*
转换为 X, 因此输出为1 - 由于没有对象来存储返回值,返回值被丢弃,没有输出
- 调用
g(const char*)
,并且X c(b)
和X(const char*)
相同,输出为1 - 返回值再次被丢弃,没有输出
因此答案是11。问题的给定答案是131。我使用g++ 4.4.4-13编译,得到的答案是121。
据说这段代码是使用以下命令编译的:
g++ -std=c++11 -Wall -Wextra -O -pthread
中间的数字是从哪里来的?为什么它可以是3或2?