void func(string& s)
{
cout << s;
}
int main()
{
func("123");
return 0;
}
该段代码的输出是
A.编译不通过
B.123
Question 10 - 单选题
void func(int& x)
{
cout<<x<<endl;
}
int main()
{
int i = 1;
func(i * 3);
return 0;
}
这段代码的输出结果是
A.1
B.3
C.编译错误
D.运行错误
第一个问题:
这里尝试将一个字符串字面量("123"
)传递给一个接受std::string&
类型参数的函数func
。在C++中,字符串字面量是const char[]
类型,而非std::string
类型,因此编译器会尝试创建一个临时的std::string
对象来从字面量构造一个字符串。然而,非const
引用不能绑定到临时对象上(因为非const
引用可能会修改绑定的对象,而临时对象在表达式结束时就会被销毁,这通常是不安全的)。因此,这段代码会导致编译错误。
答案是:
A. 编译不通过
第二个问题:
这段代码尝试将表达式i * 3
的结果传递给func
函数,该函数接受一个int&
类型的参数。表达式i * 3
的结果是一个右值(即,一个临时结果,而不是一个具有明确存储位置的变量),而非const
引用(int&
)不能绑定到右值上。这是因为非const
引用可能会修改它所绑定的对象,而右值通常不是持久对象,这样的修改没有意义。
答案是:
C. 编译错误