首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C++11:"auto“关键字会检索cv-限定符吗?我有自相矛盾的样本

C++11:"auto“关键字会检索cv-限定符吗?我有自相矛盾的样本
EN

Stack Overflow用户
提问于 2016-06-09 08:12:59
回答 1查看 248关注 0票数 5

我有如下程序:

代码语言:javascript
运行
复制
struct A{ int i; };

int main()
{
    const int i = 0;
    auto ai = i;
    ai = 2; // OK

    const A buf[2];
    for(auto& a : buf)
    {
        a.i = 1; // error!
    }

    std::cout << buf[0].i << buf[1].i << std::endl;
}

第一个auto ai = i;没有问题,似乎auto没有检索c/v限定符,因为ai可以修改,但是ai循环在只读对象中失败编译为-错误:成员A::i的赋值。

我知道auto不检索&特性,我的问题是:auto检索c/v限定符和我的情况一样吗?我的测试程序似乎给出了自相矛盾的提示。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-09 08:25:34

您在这里复制ai,而不是修改它:

代码语言:javascript
运行
复制
const int i = 0;
auto ai = i;

上述代码相当于:

代码语言:javascript
运行
复制
const int i = 0;
int ai = i;

如果尝试接受非const引用,则会得到编译时错误:

代码语言:javascript
运行
复制
const int i = 0;
auto& ai = i;
ai = 5; // Error: assignment of read-only reference 'ai'

正如鲍吉拉蒙所建议的那样,下面的代码片段相当于上面的代码:

代码语言:javascript
运行
复制
const int i = 0;
const int& ai = i;
ai = 5;

有关auto说明符可以在cppreference上找到的更多详细信息。

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37720323

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档