什么是const无效
What is const void?
std::is_void
的描述说明:
提供等于tru的成员常数,如果t是类型void,const void,domatile void,或const挥发性void。
那么const void
或volatile void
是什么?
此答案指出const void
返回类型将无效(但是VC 2015上的编译)
const void foo() { }
如果按标准,const void
无效(VC错误) - 那么const void
是什么?
const void
是一种可以形成指针的类型。它类似于普通的空隙指针,但是转换的工作方式不同。例如,const int*
不能隐式转换为void*
,但可以将其隐式转换为const void*
。同样,如果您有const void*
,则不能 static_cast
它到int*
,但是可以static_cast
到const int*
。
const int i = 10;
void* vp = &i; // error
const void* cvp = &i; // ok
auto ip = static_cast<int*>(cvp); // error
auto cip = static_cast<const int*>(cvp); // ok
作为 void
, const void
是一个void类型。但是,如果 const void
是返回类型,则 const
是毫无意义的(尽管法律!),因为[expr]/6:
如果prvalue最初具有" cv
T
"类型,其中T
是cv Unqualified的非级别,非阵列类型,则类型 在进行进一步分析之前,将表达式调整为T
。
但是,它是一种有效的类型本身,发生在例如C-标准库函数,用于确保参数指针的const-corments:int const*
不能转换为void*
,而是void const*
。
类型可以是模板的结果;模板可能陈述const T
,并用T
实例化为void
。
链接的答案被误导了,或者说是有限的,因为它指的是非模板类型的特殊情况,即使如此,const void
也可能是毫无意义有效代码。
- 将 const 转换为 const char* 无效,我该如何解决?使用 gcc7 时失败
- 为什么在引用指针时将 const 放在 & 符号的左侧有效,而在右侧则无效?
- C++ 错误:由于 swprintf 而从 'int' 到 'const wchar_t* 的转换无效
- 类型"int"和"const char [15]"到二进制"运算符<<"的无效操作数^
- 错误:从'void*'到'const uint8_t* {aka const unsigned char*}'的转换无效 [-允许]
- 错误:从 'char' 到 'const char' [-允许] strcat(加密,密钥[i])的转换无效;
- 返回对象时从'const DList<int>* const'到 'DList<int>*' [-fallowive] 的转换无效
- 我收到一个错误无效的操作数,类型为 const char [42] 和二进制"运算符+"的双倍数
- 错误:数组下标的类型"const bool[int]"无效
- constexpr 链表 - 从 const X* 到 X* 的转换无效
- 在这个简单函数中从'char'到'const char*'的无效转换
- 'const char [26]' 和 'LPSTR ' 类型的无效操作数
- C++从 'const char*' 到 'char*' Arduino Uno 的无效转换
- 在 C++ 中从 'const float*' 到 'float*' 的转换无效
- 如何修复C++中的"错误:从'int'到'const char*'[-fallowive]的无效转换?
- 将文本文件读取为 const char* 有时有效,有时无效
- C++:"错误:类型'const char*'和'const char [28]'的操作数无效到二进制'ope
- C++错误:从"char"到"const char*"的转换无效[-允许]
- 从'const char**'到'char* const*'的转换无效
- unordered_set:二进制表达式的操作数无效("const Play"和"const Play")