gpt4 book ai didi

c++ - 引用变量的声明需要一个初始化器

转载 作者:行者123 更新时间:2023-12-04 16:23:26 27 4
gpt4 key购买 nike

我已将我的真实程序简化为一个玩具示例。

假设我有以下代码:

struct A
{
A( string i ) { }
A( string *i ) { }
};

int main()
{
string s;
A("HELLO"); // Works
A(&s); // XCode: Declaration of reference variable 's' requires an initializer
// Visual Studio: error C2040: 's': 'A &' differs in levels of indirection from 'std::string'
}

我不明白错误信息。 XCode是什么意思“引用变量's'的声明需要一个初始化程序”?为什么 A("HELLO"); 有效,而 A(&s) 无效?

最佳答案

这是一种称为最麻烦的解析的现象。

C++ 将 A(&s); 视为一个名为 s 的变量的声明,其类型为 A&。这不起作用有几个原因:

  • 需要初始化引用,而你在这个例子中并没有初始化s(注意:这个s不是同一个s 作为之前 2 行中的代码)。

  • 您已经在同一范围内有一个名为 s 的变量,所以这将是一个重新定义。

要创建一个更小的示例,请看一下这两行等效的代码,它们都声明了一个名为 x 的变量,类型为 int:

int x;
int(x);

要解决此问题,您可以简单地使用使用所需构造函数的正确声明,这样就不会遇到最棘手的解析问题:

A x1(&s); // this
auto x2 = A(&s); // or this
A{&s}; // or this, just to create a temporary

关于c++ - 引用变量的声明需要一个初始化器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69248104/

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