gpt4 book ai didi

C++类问题

转载 作者:可可西里 更新时间:2023-11-01 18:41:44 26 4
gpt4 key购买 nike

我正在复习我的期末考试,但我无法弄清楚为什么会出现这个问题。

假设下面的类声明:

class Testing {
public:
Testing(int n);
void Show(const Testing& w, int a = 10);
int value;
private:
int DoThis();
};

假设以下代码行正在 main() 程序中尝试,并且 x 的类型为 Testing并已正确创建。

x.Show(18);合法还是非法

答案是合法的,我知道因为 = 10 而不需要第二个参数, 但由于 18不是 Testing 类型这不是无效参数吗?

最佳答案

测试有一个采用 int 的非显式构造函数。因此,可以通过构造临时对象将 int 隐式转换为 Testing

由于 Show 需要一个 const Testing &(而不仅仅是一个 Testing &),您可以向它传递一个临时变量。最后,第二个参数是可选的,因此您不必为其指定值。

顺便说一句,这整个机制允许你这样做:

void f(const std::string &str);
// ...
f("Hello");

这里,"Hello"const char (&)[6] 类型,它退化为 const char *,但是您可以从 const char * 构造一个 std::string,从而允许使用 const char *,其中 std::string 需要参数。

请记住,这构造了一个临时变量,因此仅对按值或按常量引用传递的参数有效(对引用将失败)。此外,构造函数不得标记为 explicit

关于C++类问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4392357/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com