小编Ste*_*mba的帖子

if-else 语句的 lambda 表达式的返回类型推导

我正在阅读 C++ 入门第 5 版,第 10 章(lambdas 表达式),这是一个旨在用绝对值替换向量中的负值的程序。

transform(vi.begin(), vi.end(), vi.begin(),
      [](int i) { if (i < 0) return -i; else return i; });
Run Code Online (Sandbox Code Playgroud)

作者说:

这段代码无法编译,因为 lambda 将返回类型推断为 asvoid但我们返回了一个值,为了解决这个问题,我们必须使用尾随返回类型。

但是当我在 Windows 上用 GNU GCC Compiler 编译这段代码时,它运行良好。

作者还说:

这个版本编译是因为我们不需要指定返回类型,因为可以从条件运算符的类型推断出该类型。

transform(vi.begin(), vi.end(), vi.begin(),
          [](int i) { return i < 0 ? -i : i; });
Run Code Online (Sandbox Code Playgroud)

所以,我的问题是:

  • 为什么在第一个版本中,lambda 将返回类型推断为 void,为什么 GNU GCC 编译器接受这个。*(我认为这可能是因为优化)。?
  • 为什么在第二个版本中,可以从条件运算符的类型推断返回类型?

c++ lambda if-statement conditional-operator

2
推荐指数
1
解决办法
559
查看次数

对 MasterController::StaticMetaObject 的未定义引用

我刚刚开始学习 Qt,目前我正在阅读Nicolas Sheriff所著的《Learn Qt 5》一书。我在哪里,在第 2 章中,我正在按照所有说明进行操作,并且我了解自己在做什么,但是我遇到了一件事:当我与其他程序一起编译以下程序时,我收到了此错误列表:显示错误消息的图像

这是项目结构

我觉得值得展示的文件是:

cm.pro 文件

QT       -= gui

TARGET = cm-lib
TEMPLATE = lib

CONFIG += c++17
DEFINES += CMLIB_LIBRARY
INCLUDEPATH += source

SOURCES += source/models/client.cpp \
           source/controllers/master-controller.cpp \

HEADERS += source/cm-lib_global.h \
           source/controllers/master-controller.h \
           source/models/client.h \
Run Code Online (Sandbox Code Playgroud)

cm-lib.pro

QT       -= gui

TARGET = cm-lib
TEMPLATE = lib
CONFIG += c++17
DEFINES += CMLIB_LIBRARY
INCLUDEPATH += source

SOURCES += source/models/client.cpp \
           source/controllers/master-controller.cpp \

HEADERS += source/cm-lib_global.h \
           source/controllers/master-controller.h \ …
Run Code Online (Sandbox Code Playgroud)

c++ qt

2
推荐指数
1
解决办法
2576
查看次数

标签 统计

c++ ×2

conditional-operator ×1

if-statement ×1

lambda ×1

qt ×1