gpt4 book ai didi

c++ - 资格调整(const/volatile)可能导致歧义

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

谁能帮我理解为什么当 getter 是 const 时下面的代码无法编译(VS2010)?

测试代码如下:

#include <boost/system/error_code.hpp>

class socket {
public:

// setter - throw exception version
void non_blocking(bool mode)
{
// ...
}

// getter - error code version
bool non_blocking(boost::system::error_code& ec) const
{
// ...
}

// setter - error code version
void non_blocking(bool mode, boost::system::error_code& ec)
{
// ...
}

// getter - throw exception version
bool non_blocking() const
{
// ...
}
};

int main()
{
socket s;
boost::system::error_code ec;
bool result = s.non_blocking(ec);

return 0;
}

我知道 boost::system::error_code 可以转换为 bool 但不明白为什么 const 会导致歧义。这是来自 VS2010 的错误消息:

1>c:\projects\pcap++\trunk\main.cpp(145): error C2666: 'socket::non_blocking' : 2 overloads have similar conversions
1> c:\projects\pcap++\trunk\main.cpp(134): could be 'bool socket::non_blocking(boost::system::error_code &) const'
1> c:\projects\pcap++\trunk\main.cpp(129): or 'void socket::non_blocking(bool)'
1> while trying to match the argument list '(boost::system::error_code)'
1> note: qualification adjustment (const/volatile) may be causing the ambiguity

最佳答案

可能有两个排名相同的转化:

  • 套接字 &套接字常量 &

  • boost::system::error_codebool

您可以手动消除歧义:

bool result = static_cast<socket const &>(s).non_blocking(ec);

s.non_blocking(bool(ec));

关于c++ - 资格调整(const/volatile)可能导致歧义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8445563/

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