const_cast <char *>(char * const)不是左值吗?

用户名

当编译下面的代码时,我在第3行收到关于const_cast不是左值的错误。这仅仅是一个问题,因为我使用了gcc 7.x(即使它应该完全符合C ++ 17)?还是按照标准,这确实是无效的代码?

下面的代码是触发错误的最小示例。尝试了gcc 7.1、7.4和https://www.onlinegdb.com/online_c++_compiler,并得到了相同的错误。

char* const a = "xyz";
char* b;
const_cast<char*>(a) = b;  // not lvalue error

gcc给出的精确错误是:“错误:左赋值作为赋值的左操作数”。

注意(忘记添加):该示例与我将要编写的实际代码无关。这是我想到的一个示例,该示例的创建是为了测试人们对标准的理解程度。因此,我只对我在问题中提出的确切内容感兴趣,即,这是否是有效代码(以及为什么)。谢谢!

讲故事的人-Unslander Monica

因此,我只对我在问题中提出的内容感兴趣,即,这是否是有效的代码

不是。const_cast仅当转换为引用类型时,的结果才是glvalue(lvalue或xvalue)。

[expr.const.cast](重点是我的)

1表达式的结果const_­cast<T>(v)为类型T如果T是对对象类型的左值引用,则结果为左值;如果T是对对象类型的右值引用,则结果为xvalue;否则,结果为prvalue,并且对表达式v执行左值到右值,数组到指针和函数到指针的标准转换。const_­cast下面列出了可以使用显式执行的转换不得使用明确执行其他转换const_­cast

您无需转换为引用类型,因此结果是prvalue;不是您可以分配给的东西。而且也不要强制转换为引用类型;尝试修改声明为const的对象会产生未定义的行为。那么您的程序将是另一种无效的程序。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

函数findx()中是否可以替代const_cast <char *>?

来自分类Dev

为什么 const_cast from and to a const char * 导致 strcmp != 0

来自分类Dev

(const char *)++或(const char)++?

来自分类Dev

使用const_cast <char *>()将std :: string :: c_str()的结果传递给mkdtemp()。

来自分类Dev

const char **和char **

来自分类Dev

const char * vs const char []

来自分类Dev

const constexpr char *与constexpr char *

来自分类Dev

不允许从'const unsigned char * const *'到'const char * const *'的static_cast

来自分类Dev

constexpr const char *与constexpr const char []

来自分类Dev

Funktionsargument const char * vs. const char **

来自分类Dev

Sizeof const char *错误值

来自分类Dev

比较const char *与strcmp

来自分类Dev

const char *的多个定义

来自分类Dev

const(char)*无法修改

来自分类Dev

const char *返回类型

来自分类Dev

const char *损坏

来自分类Dev

比较const char *与strcmp

来自分类Dev

C ++数组const char

来自分类Dev

const(char)*无法修改

来自分类Dev

与const_cast相反

来自分类Dev

从'const char *'到'unsigned char *'的无效转换

来自分类Dev

预期的const char *,但参数为char类型

来自分类Dev

从'const char *'到'char *'的无效转换

来自分类Dev

将C ++ const char *转换为char *

来自分类Dev

错误:从'char'到'const char *的无效转换*

来自分类Dev

C将const char *转换为char

来自分类Dev

“ char * _EXFUN(index,(const char *,int)))”的含义

来自分类Dev

const char *指向堆栈上的char数组

来自分类Dev

将const char *分配给char *