为什么 const_cast(或 static_cast)不添加 const?
Why does a const_cast (or static_cast) not add const?
我正在看这个 answer 并且想使用。但是,在使用 static_cast
和 const_cast
时出现分段错误,但如果我使用临时变量,一切都很好。这显然是因为 bar()
的非 const 版本一遍又一遍地调用它。但是我虽然 static_cast
会导致 const foo*
,然后选择 bar()
的 const 版本。为什么会这样?
#include <iostream>
using namespace std;
class foo
{
public:
void bar() const
{
cout << "const" << endl;
}
void bar()
{
cout << "non-const" << endl;
// static_cast<const decltype(this)>(this)->bar();
// const_cast<const decltype(this)>(this)->bar();
const auto& tmp = *this;
tmp.bar();
}
};
int main() {
foo A;
A.bar();
const foo B;
B.bar();
static_cast<const foo*>(&A)->bar();
return 0;
}
decltype(this)
是 foo*
。 const decltype(this)
是 foo* const
.
您不更改指针 cv 资格,只更改指针。因此每次都选择非常量重载。
我正在看这个 answer 并且想使用。但是,在使用 static_cast
和 const_cast
时出现分段错误,但如果我使用临时变量,一切都很好。这显然是因为 bar()
的非 const 版本一遍又一遍地调用它。但是我虽然 static_cast
会导致 const foo*
,然后选择 bar()
的 const 版本。为什么会这样?
#include <iostream>
using namespace std;
class foo
{
public:
void bar() const
{
cout << "const" << endl;
}
void bar()
{
cout << "non-const" << endl;
// static_cast<const decltype(this)>(this)->bar();
// const_cast<const decltype(this)>(this)->bar();
const auto& tmp = *this;
tmp.bar();
}
};
int main() {
foo A;
A.bar();
const foo B;
B.bar();
static_cast<const foo*>(&A)->bar();
return 0;
}
decltype(this)
是 foo*
。 const decltype(this)
是 foo* const
.
您不更改指针 cv 资格,只更改指针。因此每次都选择非常量重载。