gpt4 book ai didi

c++ - gcc 4.9.1 不符合标准? (std::runtime_error)

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

我们希望对 std::runtime_error:runtime_error(const string& arg) 有自己的定义。我们根据其他构造函数实现此类构造函数,即 std::runtime_error:runtime_error(const char*),例如:

namespace std {
runtime_error::runtime_error(const string& arg)
: runtime_error(arg.c_str()) {
...
}
}

对于 gcc-4.9.1,这是不可能的,因为构造函数 std::runtime_error::runtime_error(const string& arg) 不存在。在 gcc/4.9.1/include/c++/4.9.1/stdexcept 中,我们看到以下内容:

...
class runtime_error : public exception
{
string _M_msg;
public:
/** Takes a character string describing the error. */
explicit
runtime_error(const string& __arg);
virtual ~runtime_error() _GLIBCXX_USE_NOEXCEPT;
/** Returns a C-style character string describing the general cause of
* the current error (the same string passed to the ctor). */
virtual const char*
what() const _GLIBCXX_USE_NOEXCEPT;
};
...

标准明确指出应该有一个显式的runtime_error(const char*)构造函数。

19.2.6 类runtime_error [runtime.error]

namespace std {
class runtime_error : public exception {
public:
explicit runtime_error(const string& what_arg);
explicit runtime_error(const char* what_arg);
};

最佳答案

也许这并没有回答您最初的问题,但如果您的意图确实是拦截 runtime_error 实例化,您可以这样做(假设使用 gcc):

namespace std {
runtime_error::runtime_error(const string& arg)
#if (__GNUC__ > 4)
: runtime_error(arg.c_str())
#else
: _M_msg(arg)
#endif
{
// intercept here!
}
}

希望被调用的 runtime_error(const char*) 不会在未来以 runtime_error(const string&) 的形式实现,这会打破你所有的希望和欲望。 =)

关于c++ - gcc 4.9.1 不符合标准? (std::runtime_error),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39642390/

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