General: Make operator bool overloads and single-arg constructors explicit

Prevents various error-prone cases of implicit conversion to bool, while
retaining general conversions within conditional statements. We also
disable implicit conversions with constructors that may be ambiguous to
enforce being clear with intentions.
This commit is contained in:
Lioncash 2019-08-14 09:49:31 -04:00
parent 8d356cb3da
commit 6ce7c38e24
4 changed files with 9 additions and 9 deletions

View File

@ -91,7 +91,7 @@ class Endpoint {
return x34_bytesSent * 100 / x64_totalBytes;
}
bool isDone() const { return !x14_callback; }
operator bool() const { return m_initialized; }
explicit operator bool() const { return m_initialized; }
};
friend class ThreadLocalEndpoint;

View File

@ -10,8 +10,8 @@ namespace jbus {
/** Server interface for accepting incoming connections from GBA emulator instances. */
class Listener {
net::Socket m_dataServer = {false};
net::Socket m_clockServer = {false};
net::Socket m_dataServer{false};
net::Socket m_clockServer{false};
std::thread m_listenerThread;
std::mutex m_queueLock;
std::queue<std::unique_ptr<Endpoint>> m_endpointQueue;

View File

@ -24,10 +24,10 @@ class IPAddress {
void resolve(const std::string& address);
public:
IPAddress(const std::string& address) { resolve(address); }
explicit IPAddress(const std::string& address) { resolve(address); }
uint32_t toInteger() const;
operator bool() const { return m_valid; }
explicit operator bool() const { return m_valid; }
};
/** Server-oriented TCP socket class derived from SFML */
@ -50,7 +50,7 @@ public:
static EResult LastWSAError();
#endif
Socket(bool blocking) : m_isBlocking(blocking) {}
explicit Socket(bool blocking) : m_isBlocking(blocking) {}
~Socket() { close(); }
Socket(const Socket& other) = delete;
@ -76,7 +76,7 @@ public:
EResult recv(void* buf, size_t len, size_t& transferred);
EResult recv(void* buf, size_t len);
operator bool() const { return isOpen(); }
explicit operator bool() const { return isOpen(); }
SocketTp GetInternalSocket() const { return m_socket; }
};

View File

@ -43,8 +43,8 @@ void Listener::listenerProc() {
}
/* We use blocking I/O since we have a dedicated transfer thread */
net::Socket acceptData = {true};
net::Socket acceptClock = {true};
net::Socket acceptData{true};
net::Socket acceptClock{true};
std::string hostname;
while (m_running) {
if (m_dataServer.accept(acceptData, hostname) == net::Socket::EResult::OK) {