C++显式类型转换(C 样式强制转换)的强制表示法和static_cast的多种解释
C++ cast notation of explicit type conversion (C-style cast) and multiple interpretations of static_cast
[expr.cast](在撰写本文时可用的C++标准的最新草案中(的第4段描述了C型cast的行为,内容如下:
执行的转换
- 一个
const_cast
,- 一个
static_cast
,- 一个
static_cast
后跟一个const_cast
,reinterpret_cast
,或- 一个
reinterpret_cast
后跟一个const_cast
,可以使用显式类型转换的强制转换表示法来执行。相同的语义限制和行为也适用,不同之处在于,在以下情况下执行
指向派生类类型的对象的指针或派生类类型的左值或static_cast
时,即使基类不可访问,转换也是有效的:
- 右值可以分别显式转换为指向明确基类类型的指针或引用;
指向派生类类型成员的指针- 可以显式转换为指向明确非虚拟基类类型成员的指针;
指向明确非虚拟基类- 类型的对象的指针、明确非虚拟基类类型的 GL值或指向明确非虚拟基类类型成员的指针可以分别显式转换为指针、引用或指向派生类类型成员的指针。
如果可以通过上面列出的多种方式解释转换,则使用列表中首先出现的解释,即使由该解释产生的转换格式不正确也是如此。如果一个转换可以用多种方式解释为一个
static_cast
后跟一个const_cast
,则转换是格式错误的。[...]
我的问题是,如何">以多种方式将皈依解释为static_cast
后跟const_cast
"?
谢谢。
像这样:
struct S {
operator int const**() { return nullptr; }
operator int *const*() { return nullptr; }
};
S s;
(int**)s; // error: cannot cast from type 'S' to pointer type 'int **'
与int const**
和int *const*
相似的演员阵容成功了。演示
相关文章:
- 请解释"函数1(p1,p2,p3);"的输出
- 请解释这句话(cout<<1+int((a<b)^((b-a)&1) )<<endl
- 为什么即使使用-cudart-static进行编译,库用户仍然需要链接到cuda运行时
- 被解释为低级别const的const对象的地址
- 计算每个节点的树高,帮助我解释这个代码解决方案
- MSVC将仅移动结构参数解释为指针
- 内联程序集printf将整数解释为地址
- 有人能解释一下为什么下界是这样工作的吗C++的
- Visual Studio(或任何其他工具)能否将地址解释为调用堆栈(boost上下文)的开头
- 我是c ++的新手,你能解释一下在这种情况下的指针吗
- 有人能为我解释一下C++代码吗
- 如何处理 c++ 中类实现中的"invalid use of non-static data member"?
- 你能解释一下什么运行时错误是如何解决它的吗?
- 请解释字谜的代码,我看不懂计数器数组,每个值已经是0
- 有人可以向我解释为什么控制台输出 0 吗?
- 有人可以解释一下这段代码如何能够反转字符串
- 在 C++ 中解释多维向量的语句时感到困惑
- 收到错误"invalid use of non-static data member 'stu::n' "
- 解释一下 for (char c : str) 的作用?
- 确切地说,如何解释 std::getline(stream, string) 函数在C++中填充的字符串