gpt4 book ai didi

c++ - 如何确定它是强制转换还是构造函数调用

转载 作者:行者123 更新时间:2023-11-30 01:59:13 27 4
gpt4 key购买 nike

以此为例:

const Integer operator+(const Integer& left, const Integer& right) {
return Integer(left.i + right.i);
}

(摘自《Thinking in C++》第496页)

return 语句之后的部分是什么? 强制转换(使总和的结果成为Integer)或调用 Integer 类构造函数>?或者我忽略的其他东西..

这是构造函数:

Integer(long ll = 0) : i(ll) {}

编辑:

i 它是 long int

最佳答案

转换意味着“将一种数据类型的实体更改为另一种数据类型”。也就是说,您可以将 Integer() 视为从 longInteger 的转换,因为这两种类型是相关的并且操作转换为 < em>“从类型 A 的对象开始构建类型 B 的对象”。

使用这种语法,没有防止误用的保护,即如果构造函数只接受一个参数,则该参数可能不会用于构建直接表示第一个的对象(例如,每个 QWidget 接受一个指向父级的指针,但显然它不代表其父级),并且您无法采取任何措施来阻止这种情况。您可以通过将单参数构造函数标记为 explicit 来阻止隐式初始化,但仅此而已。

旧式转换和只有一个参数的构造函数的语法完全相同,这就是为第一个创建新语法的原因:使用新样式(显式) 用于转换的 C++ 语法,即 const_castdynamic_caststatic_castreinterpret_cast(视情况而定) .

very words of Bjarne Stroustrup , 引入这种冗长的转换语法是为了明确转换何时发生。请注意,拥有四种形式还可以适当区分程序员的意图。

最后,int() 等对于普通类型(intlong 等)和 newvar = (T)oldvar 形式的存在只是因为 C 兼容性约束。

关于c++ - 如何确定它是强制转换还是构造函数调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16500056/

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