gpt4 book ai didi

c++ - 明确论证?

转载 作者:行者123 更新时间:2023-12-01 13:51:37 24 4
gpt4 key购买 nike

explicit 可以用于例如。一个构造函数或转换函数,以避免隐式调用该构造函数/转换 - 简而言之。

我对是否可以进行单个论点感兴趣 不知何故(缺少滚动新类型)?也许使用编译器扩展?

使用引用使复制构造变得不可能,因此这是一种解决方案,尽管不是我正在寻找的解决方案。有时能够强制 explicit 将是整洁的工具/界面说明符。在功能层面。

void f(std::string& s); //cannot copy convert into s

void f(const std::string& t);//calling with char* allowed

特别是对于字符串,应该使用什么类型来避免从 char* 构造?

最佳答案

您不能显式标记参数,但您可以做的是添加一个具有右值引用参数的重载并将其删除,例如

void f(const std::string& t);
void f(std::string&&) = delete;

这将做的是它允许 f接受 std::string ,但如果由于隐式转换而创建了右值,则将改为选择右值引用重载,并且您将收到有关使用已删除函数的编译器错误。

这样做的原因是右值引用参数在重载解析中优于对 const 的引用,因此在传递临时值时将始终调用它。只有在选择函数后,编译器才会看到它被删除,因此它会发出错误。

关于c++ - 明确论证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60531823/

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