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

返回表达式“{}”的含义

宗政霄
2023-03-14
#include <string>
#include <iostream>

class A{
    int i{};
    std::string s{};
    public:
        A(int _i, const std::string& _s) : i(_i), s(_s) {
            puts("Called A(int, const std::string)");
        }

};

A foo(int k, const char* cstr){
    return {k, cstr};           // (*)
}

int main(){
    auto a = foo(10, "Hi!");
    return 0;
}

兴趣线是(*)。我猜函数foo相当于:

A foo(int k, const char* str){
    return A(k, cstr);
}

但是,在(*)中是否有专门为这种机制命名呢?还是仅仅是编译器由于返回类型而知道要调用哪个构造函数这一简单事实?

共有1个答案

包永新
2023-03-14

return{k,cstr};表示{k,cstr}是返回值的初始值设定项。此外,它还指示“返回一个函数的返回类型的对象,该函数的返回类型是用k和cstr初始化的,这意味着确切的行为取决于返回对象的类型”。

返回值可以通过两种不同的方式初始化:

  • 返回A(k,cstr);-从k,cstr
  • 复制初始化返回值
  • 返回{k,cstr};-返回值是从类A初始化的复制列表。
 类似资料:
  • 我正在编写一个lambda表达式来将给定的纬度和经度转换为地址。表达式应该以坐标为参数,并返回其相应的地址。但是,返回的值为null。以下是我的班级: 以下是logcat的输出: 以下是我的用法: 是类的对象,以下是相关接口: 当我尝试从相关适配器打印坐标时,它们会正确打印。因此,位置正在正确设置,但是当我试图从另一个类访问它时,它会显示字符串的空值。你能建议一个替代方法来从表达式中提取位置吗?

  • 目标: 使用正则表达式仅显示路径的实际文件夹名称。例如, 应该减少到 应该有进一步的规则来防止用户将驱动器作为文件夹输入。 问题: > 条件返回,我不知道为什么。 的行抛出了一个 ArgumentException 告诉我(粗略翻译)在分析序列 时,“有一个未完成的 [] 子句”。 我的想法: > 我选择的任何编辑器都将“C:\”标记为指定表达式的匹配项。 中的双反斜杠可能被视为实际转义右方括号,

  • 问题内容: 使用Python正则表达式如何获得/返回?所有Python回报是: 问题答案: 对象始终为true,如果不匹配,则返回。只是测试真实性。

  • 我有一个静态的通用FormBuilder超文本标记语言助手方法(HTMLHelper类上的扩展方法),它接受视图模型类型的通用参数,然后当从数据库传递一个或多个字符串属性名称时,生成一个超文本标记语言形式在ASP. NET MVC 5.1 with. NET 4.5中。 我有一个公共方法来生成表单,还有单独的私有方法来生成表单中的“模块”部分,然后渲染其中的每个字段。类型参数从上到下沿此链传递。

  • 问题内容: 我试图弄清楚如何从lambda表达式返回方法值: 但是,似乎在lambda表达式中使用关键字将显式返回lambda函数本身。是否有某种方式可以中断或强制返回整个方法? 问题答案: 是否有某种方式可以中断或强制返回整个方法? 不会。至少,除非抛出异常,否则不会。 基本上,这不是什么意思。您可以编写一个方法,该方法接受一个函数,该函数将返回“继续执行” ,而返回非null则表示“停止,并将

  • 将异常获取为 :lambda表达式中的返回类型错误: