gpt4 book ai didi

c++ - 为什么用 A{8} 初始化的对象不能作为参数传递?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:58:05 25 4
gpt4 key购买 nike

以下代码使用 VC++ 2012 年 11 月 CTP 编译。

#include <iostream>

using namespace std;

struct A
{
A(int n)
{
cout << n << endl;
}
};

void f(A)
{}

int main()
{
A {8}; // OK. A::A(8); is called;

cout << typeid(decltype(A {8})).name() << endl; // Output 'struct A'

f(A {8}); // error C2275: 'A' : illegal use of this type as an expression
}

Q1:为什么是f(A {8});不合法?

问题 2:为什么 A {8} 不被视为 A 的实例?

更新:

这个问题似乎是 VC++ Nov 2012 CTP 的一个错误。

最佳答案

{8} 是一个带有扩展初始化列表的声明。在 C++11 之前,您不能使用扩展的初始化列表。但您可以改为调用构造函数。

对于 C++11,您的代码是正确的。

关于c++ - 为什么用 A{8} 初始化的对象不能作为参数传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14920351/

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