gpt4 book ai didi

c++ - 使用 [] 运算符时为 "binding reference of type discards qualifiers"

转载 作者:行者123 更新时间:2023-11-30 01:03:32 24 4
gpt4 key购买 nike

我在 C++ 应用程序中使用 C 样式数组(需要与 C 代码交互),但是在数组上使用 [] 运算符时,我得到了“类型丢弃限定符的绑定(bind)引用”。这是一个小例子:

#include <iostream>
struct outer_struct {
struct {
int i;
} array[1];
} temp_struct;

typedef decltype( static_cast<outer_struct*>(nullptr)->array[0] ) typed;

void do_something_2(const typed &thing)
{
std::cout << thing.i << std::endl;
}

void do_something_1(const outer_struct &thing)
{
// error: binding reference of type ‘outer_struct::<unnamed struct>&’ to
// ‘const outer_struct::<unnamed struct>’ discards qualifiers
do_something_2(thing.array[0]);
}

int main()
{
temp_struct.array[0].i = 2;
do_something_1(temp_struct);
return 0;
}

我原以为在 const 引用上使用 [] 运算符会返回 const 引用,但从编译器输出来看,情况似乎并非如此。将 do_something_1 的签名更改为

void do_something_1(outer_struct &thing)

解决错误。我通常对 const 的正确性没有问题,但老实说我无法弄清楚我在这里做错了什么。感谢您的帮助。

我使用的是 g++ 7.3.0。我也尝试过旧版本的 GCC。

最佳答案

您需要删除 decltype 返回的额外引用(因为内置下标运算符的结果是引用):

using
inner_struct = ::std::remove_reference_t<decltype(::std::declval<outer_struct &>().array[0])>;

online compiler

关于c++ - 使用 [] 运算符时为 "binding reference of type discards qualifiers",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53071306/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com