gpt4 book ai didi

c++ - "T t = {};"和 "T t{};"可以产生不同的结果吗?

转载 作者:行者123 更新时间:2023-12-01 09:19:37 27 4
gpt4 key购买 nike

问题很简单。是否可以构造这样一个类型 T,对于它下面的两个变量声明会产生不同的结果?

T t1 = {};
T t2{};

我已经研究 cppreference 和标准一个多小时了,我了解以下内容:
  • T t2{};value initialization .这里没有惊喜。
  • T t1 = {}list initialization带有空的花括号初始化列表。

  • 但是最后一个很棘手,因为“列表初始化的效果”是一个令人印象深刻的......列表。对于类,基本类型和聚合似乎归结为值初始化。但我不确定我没有错过任何东西。

    也许您可以提供一个上下文,其中两个声明会产生不同的效果?

    更新:关于 explicit的优秀回答 build 者!下一级:是否有可能两个语句都编译,但对编译/运行时有不同的影响?

    最佳答案

    如果您考虑一种情况,其中一个语句可以编译,但另一个语句不会编译为“不同的效果”,那么是的,这是一个上下文:

    #include <iostream>

    class T {
    public:
    int data{ 0 };
    explicit T() {
    data = 0;
    std::cout << "Default constructor" << std::endl;
    }
    };

    int main()
    {
    T t1 = {};
    T t2{};
    return 0;
    }

    声明/初始化行 t1给出以下内容,使用 clang-cl :

    error : chosen constructor is explicit in copy-initialization


    MSVC编译器也提示:

    error C2512: 'T': no appropriate default constructor available
    message : Constructor for class 'T' is declared 'explicit'

    关于c++ - "T t = {};"和 "T t{};"可以产生不同的结果吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62008160/

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