将指向成员函数的指针转换为使用同一类的另一个指向成员函数的函数是否合法reinterpret_cast
?以下示例有效.但这是合法的吗?
#include<iostream>
#include<vector>
#include<string>
class A
{
public:
void func_int(int x) { std::cout << x << std::endl; }
void func_string(std::string const& x) { std::cout << x << std::endl; }
};
int main()
{
std::vector<void(A::*)()> v;
v.push_back(reinterpret_cast<void(A::*)()>(&A::func_int));
v.push_back(reinterpret_cast<void(A::*)()>(&A::func_string));
A a;
(a.*reinterpret_cast<void(A::*)(int)>(v[0]))(5);
(a.*reinterpret_cast<void(A::*)(std::string const&)>(v[1]))(std::string{"Test"});
return 0;
}
Run Code Online (Sandbox Code Playgroud) 该符号myLibrary!__scrt_stub_for_is_c_termination_complete+0x12345
出现在崩溃的应用程序的堆栈跟踪中。它是使用MSVC2015编译的C ++,并且大量使用Qt。
myLibrary
没有显式实现该名称的任何内容。
Google对该名称显示了一些点击率,因此显然它并不特定于该应用程序。但我找不到对此的解释。
说我有:
bool operator<(Type const& lhs, Type const& rhs) { /* ... */ }
std::map<Type, void*> m;
Run Code Online (Sandbox Code Playgroud)
如果我现在这样做
Type t{};
m.find(t);
Run Code Online (Sandbox Code Playgroud)
将t
总是在左侧的参数中结束,operator<
并将m
它的元素与右侧的参数进行比较(反之亦然)?
或者这种实现是否依赖,可以采用哪种方式?