gpt4 book ai didi

c++ - {1, 2} 是一个值吗?如果是,它的类型是什么?如果不是,为什么可以将其分配给初始化列表?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:38:04 24 4
gpt4 key购买 nike

#include <initializer_list>

using namespace std;

template<class T>
void f(initializer_list<T>)
{}

int main()
{
typeid(1); // OK
typeid(int); // OK
typeid(decltype(1)); // OK

f({1, 2}); // OK

typeid({1, 2}); // error
decltype({1, 2}) v; // error
typeid(decltype({1, 2})); // error
}

{1, 2} 是一个值吗?

如果是,为什么是typeid({1, 2});不合法?

如果不是,为什么可以赋值给一个initializer_list对象?

最佳答案

  1. 不,它是一个没有内在值(value)的句法结构。它甚至(在句法上)不是一个表达式。但是它可以用来初始化一个对象。

    typeid运算符需要正确的表达式,但函数参数不需要。传递函数参数时,实际上是在初始化参数对象。

  2. initializer_list可以被这样的东西初始化。数组也可以用花括号初始化列表来初始化。该列表用于初始化通过 initializer_list 访问的数组.

令人困惑的是,auto x = { 1, 2, 3 };原因x被声明为 std::initializer_list< int > .这是一个特殊的异常(exception),其中 auto不同于 decltype , 它已被提议弃用。持久性 initializer_list 几乎没有什么好的用途

关于c++ - {1, 2} 是一个值吗?如果是,它的类型是什么?如果不是,为什么可以将其分配给初始化列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18797991/

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