gpt4 book ai didi

c++ - 跟进 C++ 中的类型强制,因为它可以通过类型转换来解释

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:40:42 26 4
gpt4 key购买 nike

这是对 my previous question 的跟进.

假设我使用以下原型(prototype)编写了一个函数:

int a_function(Foo val);

其中 foo 被认为是一个类型定义的 unsigned int。不幸的是,由于缺乏文件,这是不可验证的。

因此,有人出现并使用了 a_function,但使用 unsigned int 作为参数调用它。

故事在这里发生了转折。 Foo 实际上是一个类,它可以在显式构造函数中将 unsigned int 作为 unsigned int 的单个参数。

编译器通过对参数进行类型转换来呈现函数调用是否是一种标准且可靠的行为。 IE。编译器是否应该识别不匹配并插入构造函数?或者我应该得到一个报告类型不匹配的编译时错误。

最佳答案

如果Foounsigned int 的构造函数,隐式转换将发生,除非Foo 没有显式声明。

第一种情况:

class Foo { public: Foo(unsigned int) {} };
// ...
a_function( 1 ); // OK

第二种情况:

class Foo { public: explicit Foo(unsigned int) {} };
// ..
a_function( 1 ); // error

根据 C++ 标准,只允许一种用户定义的隐式转换。

关于c++ - 跟进 C++ 中的类型强制,因为它可以通过类型转换来解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2913206/

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