当前位置: 首页 > 知识库问答 >
问题:

列表初始化是隐式转换吗?

孟晨朗
2023-03-14
#include <iostream>
#include <string>
#include <typeinfo>
#include <typeindex>
#include <map>
#include <vector>

class Base{
public:
    virtual ~Base() {}

};

class Derived: public Base { };

int main(){

    int arr[10];
    Derived d;
    Base *p = &d;

    std::map<std::type_index, std::string> proper_name = {
        {typeid(int), "int"}, {typeid(double), "double"}, {typeid(float), "float"}, {typeid(char), "char"},
        {typeid(Base), "Base"}, {typeid(Derived), "Derived"}, {typeid(std::string), "String"},
        {typeid(int[10]), "Ten int Array"}, {typeid(p), "Base Pointer"}};

}

如果没有找到可行的初始值设定项列表构造函数,则再次执行重载解析,其中候选函数是类T的所有构造函数,参数列表由初始值设定项列表的元素组成。

8.5.4:

如果构造函数的第一个参数类型为std::initializer_list 或对某些类型e可能是CV限定的std::initializer_list 的引用,并且没有其他参数,或者所有其他参数都具有默认参数,则构造函数就是初始化式列表构造函数

pair<const type_index, std::string> p = {typeid(int), "int"}
pair<const type_index, std::string> p(typeid(int), "int")

共有1个答案

盛骏祥
2023-03-14

你的结论是

pair<const type_index, std::string> p = {typeid(int), "int"};

变成

pair<const type_index, std::string> p(typeid(int), "int");

不准确,因为第一个语句是copy-list-initialization,而第二个语句是direct-initialization。两者是相同的,只是如果选择显式构造函数,复制列表初始化的格式就不正确(前者不允许缩小转换)。

template<class U1, class U2>
explicit constexpr pair(U1&& x, U2&& y);
 类似资料:
  • 考虑如下代码: vector<double> v = { 1, 2, 3.456, 99.99 }; list<pair<string,string>> languages = { {"Nygaard","Simula"}, {"Richards","BCPL"}, {"Ritchie","C"} }; map<vector<string>,vector<int>> years = {

  • 问题内容: 我打算初始化一个长度为n的列表列表。 但是,这以某种方式将列表链接在一起。 我希望有这样的东西: 有任何想法吗? 问题答案: 问题在于它们在内存中都是完全相同的列表。当使用语法时,得到的是n许多x对象的列表,但是它们都是对同一对象的引用。它们不是不同的实例,而是n对同一实例的引用。 要列出3个不同的列表,请执行以下操作: 这为你提供了3个单独的实例,这是你想要的 类似于 虽然类似于:

  • 问题内容: 我想初始化一个多维列表。基本上,我想要一个10x10的网格-10个列表的列表,每个列表包含10个项目。 每个列表值都应初始化为整数0。 单行执行此操作的明显方法:将不起作用,因为它会生成一个包含10个引用的列表,该列表引用一个列表,因此更改任何行中的项都会更改所有行中的项。 我看过的文档讨论了用于复制列表的方法,但是在使用乘法器时仍然无法使用:与效果相同。 除了创建s循环之外,是否有一

  • 说明 用于初始化商城商品和分类,注意此协议列表中的商品将会添加到商城,请避免相同商品多次提交。 建议此协议在首次初始化商城时使用,后续新增/修改直接使用商品分类、商品的相关协议 请求地址 http://api.dc78.cn/Api/mall_init_commodity 请求方式 POST 请求参数 POST数据: data=商品明细数据,格式如下: [ { "name": "小家电", "ra

  • 我正在尝试使用lambda表达式实例化一个数组。 该数组是一个“[Ljava.lang.Object;”实例 数组的每个对象都是一个“测试”实例

  • 在试图创建一个。导入matplotlib后,我收到以下错误: 回溯(最近一次调用):文件“”,第1行,在文件“C:\Users\Flo\AppData\Local\Programs\Python\Python38\Lib\site packages\matplotlib__init__.py”中,第1015行,在rcParams=rc_params()文件“C:\Users\Flo\AppData