gpt4 book ai didi

c++ - 这个使用 C++ 'explicit' 关键字的例子是否正确?

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

GoogleTechTalks video on Youtube 中, Bjarne Stroustrup 谈论即将到来的 C++0x 标准。在视频中,他提到了以下示例:

#include <iostream>

struct Sick
{
Sick(double d) { std::cout << d << "\n"; }
explicit Sick(int i) { std::cout << i << "\n"; }
};


int main()
{
Sick s1 = 2.1;
Sick s2(2.1);
}

他是不是想把 explicit 关键字放在 Sick(double) 而不是 Sick(int) 之前,以突出相关问题在某些上下文中使用隐式转换?

最佳答案

在他的讨论中,Stroustrup 提到直接初始化,例如

Sick s2(2.1);

如果有任何 explicit 构造函数,将只考虑标记为 explicit 的构造函数。这不是我使用多个编译器(包括 GCC 4.6.1 和 MSVC 16/VS 2010)的经验,而且我在标准中找不到这样的要求(尽管如果有人能指出来我会很感兴趣)。

但是,如果在初始值设定项中使用整数,我认为该示例将显示 Stroustrup 的意图:

#include <iostream>

struct Sick
{
Sick(double d) { std::cout << "double " << d << "\n"; }
explicit Sick(int i) { std::cout << "int " << i << "\n"; }
};


int main()
{
Sick s1 = 2;
Sick s2(2);
}

运行上面的命令会显示:

double 2
int 2

表明这两个看似等价的初始化实际上选择了不同的构造函数。

(或者正如 Truncheon 在问题中提到的——我错过了——explicit 关键字应该在 Sick(double d) 构造函数中)。

关于c++ - 这个使用 C++ 'explicit' 关键字的例子是否正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7475665/

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