gpt4 book ai didi

c++ - 为什么在对象表达式的上下文中找不到我的构造函数?

转载 作者:行者123 更新时间:2023-11-28 02:46:05 25 4
gpt4 key购买 nike

代码示例:

#include<iostream>

struct A
{
int a;
A(){ a = 5; }
};

int main()
{
A *a = new A();
std::cout << a->A;//A is injected-class-name
}

为什么会找到注入(inject)类名而不是构造函数?此外,即使我们编写以下内容,我们也无法调用构造函数:

#include<iostream>

struct A
{
int a;
A(){ a = 5; }
};

int main()
{
A *a = new A();
std::cout << a->A::A//A::A denote injected-class-name
}

虽然,3.4.3.1/1 说:

In a lookup in which function names are not ignored and the nested-name-specifier nominates a class C: — if the name specified after the nested-name-specifier, when looked up in C, is the injected-class-name of C (Clause 9), or [...] the name is instead considered to name the constructor of class C.

在名称查找期间的对象表达式中,紧跟在 -> 之后,函数不会被忽略。

那么为什么在那种情况下找不到构造函数呢?

最佳答案

我真的不能说比标准更好:


12.1 Constructors [class.ctor]

Constructors do not have names. A special declarator syntax is used to declare or define the constructor.

A 不是您代码中的函数名称。

关于c++ - 为什么在对象表达式的上下文中找不到我的构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24373404/

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