如果我在不将其返回值分配给变量的情况下调用函数,会发生什么情况?

用户名

说我有以下功能:

int foo()
{
    return 1234;
}

在不将其返回值分配给任何变量的情况下调用此函数有什么作用:

foo();

另外,使用运算符而不将其返回值分配给任何变量的作用是什么:

1 + 2 + 3;
6502

在C ++中,表达式是有效的语句;计算值将被简单丢弃。

有些编译器很聪明,可以在代码看起来很奇怪的情况下向您发出警告。例如具有:

foo(1,2,3);

可以理解(调用可能具有副作用的函数),但是代码像

x < 3;

之所以没有用,是因为它没有定义的副作用,并且该值被丢弃。

在g ++中,还有一些库函数,尽管这些函数有副作用,但这些函数会被特别标记,因此忽略返回值会发出警告(如fread),因为这是等待叮咬的错误的标志。

在非常常见的情况下,经常会忽略函数的结果(例如printf),并且返回值的表达式仅用于副作用(例如std::cout << "Hello";)。

如果要在运行时强制执行功能的结果未被默默忽略,则有一个有时可以使用的技巧:

template<typename T>
struct must_check {
    T x;
    bool checked;
    must_chec(const T& x) : x(x), checked(false) {}
    operator T () { checked = true; return x; }
    ~must_check() {
        if (!checked)
          throw std::runtime_error("Result value has not been checked");
    }
};

现在不用写

int square(int x) {
    return x * x;
}

写吧

must_check<int> square(int x) {
    return x * x;
}

然后像

square(12);

将在运行时引发异常,而

int result = square(12);

会很好的工作。

这是可行的,但不是一个好主意,因为在析构函数中引发异常是一种非常糟糕的行为,通常会导致异常终止程序(原因是有时由于异常而自动调用析构函数,而引发另一个异常该阶段的例外是致命的举动)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如果未将new Class()的结果分配给变量,会发生什么情况

来自分类Dev

如果PHP总是按引用复制对象,如果将在方法中创建的对象分配给成员变量,会发生什么情况?

来自分类Dev

如果通过lambda函数对象返回对局部变量的引用,会发生什么情况?

来自分类Dev

如果我在PHP函数的末尾不包含“返回”,会发生什么情况?

来自分类Dev

如果不将字体嵌入Flash,会发生什么情况?

来自分类Dev

如果调用析构函数并将分配的内存再次用于其他对象,会发生什么情况?

来自分类Dev

如果调用析构函数并将分配的内存再次用于其他对象,会发生什么情况?

来自分类Dev

在没有分配的情况下调用std :: move()会发生什么

来自分类Dev

在C99中,是否可以在不首先将其分配给变量的情况下使用返回值?

来自分类Dev

如果我为当前不使用的字符串位置分配一个值,会发生什么情况?

来自分类Dev

如果我不在扩展类中调用可选的超级方法或构造函数,会发生什么情况?

来自分类Dev

如果从类文件中删除超级构造函数调用,会发生什么情况?

来自分类Dev

如果我在已删除的实体上调用EF Reload,会发生什么情况?

来自分类Dev

如果我们在App Delegate中的didFinishLaunching中返回NO,会发生什么情况

来自分类Dev

如果尝试并最终在方法中返回布尔值,会发生什么情况

来自分类Dev

如果我在PHP函数的末尾不包含“ return”,会发生什么情况?

来自分类Dev

当我将unpack()作为lua的函数参数调用时,会发生什么情况?

来自分类Dev

为什么我的线程调用一个函数对象而不是将其返回值分配给packaged_task的future对象?

来自分类Dev

为什么我可以将返回const T&的函数的返回值分配给T变量,而不分配给T变量?

来自分类Dev

为什么在未先将动作分配给任何东西的情况下调用动作是合法的?

来自分类Dev

我们如何在不将ViewController对象推入UINavigationController的情况下将其分配给UINavigationController呢?

来自分类Dev

如果在laravel5中没有DB :: commit()的情况下调用DB :: beginTransaction,会发生什么?

来自分类Dev

如果在反引号中为命令表达式分配了变量,会发生什么情况

来自分类Dev

如果未将返回值分配给变量,则未解决的函数重载

来自分类Dev

XSLT将函数返回值分配给变量

来自分类Dev

SQUIRREL:将函数的返回值分配给变量

来自分类Dev

如果我的过程未定义变量,但在共享库中用作外部变量,会发生什么情况?

来自分类Dev

当我们在 Bean 是单例的情况下调用 new Bean() 时会发生什么?

来自分类Dev

如果我将函数主体而不是函数名称传递给setTimeout,会发生什么情况?

Related 相关文章

  1. 1

    如果未将new Class()的结果分配给变量,会发生什么情况

  2. 2

    如果PHP总是按引用复制对象,如果将在方法中创建的对象分配给成员变量,会发生什么情况?

  3. 3

    如果通过lambda函数对象返回对局部变量的引用,会发生什么情况?

  4. 4

    如果我在PHP函数的末尾不包含“返回”,会发生什么情况?

  5. 5

    如果不将字体嵌入Flash,会发生什么情况?

  6. 6

    如果调用析构函数并将分配的内存再次用于其他对象,会发生什么情况?

  7. 7

    如果调用析构函数并将分配的内存再次用于其他对象,会发生什么情况?

  8. 8

    在没有分配的情况下调用std :: move()会发生什么

  9. 9

    在C99中,是否可以在不首先将其分配给变量的情况下使用返回值?

  10. 10

    如果我为当前不使用的字符串位置分配一个值,会发生什么情况?

  11. 11

    如果我不在扩展类中调用可选的超级方法或构造函数,会发生什么情况?

  12. 12

    如果从类文件中删除超级构造函数调用,会发生什么情况?

  13. 13

    如果我在已删除的实体上调用EF Reload,会发生什么情况?

  14. 14

    如果我们在App Delegate中的didFinishLaunching中返回NO,会发生什么情况

  15. 15

    如果尝试并最终在方法中返回布尔值,会发生什么情况

  16. 16

    如果我在PHP函数的末尾不包含“ return”,会发生什么情况?

  17. 17

    当我将unpack()作为lua的函数参数调用时,会发生什么情况?

  18. 18

    为什么我的线程调用一个函数对象而不是将其返回值分配给packaged_task的future对象?

  19. 19

    为什么我可以将返回const T&的函数的返回值分配给T变量,而不分配给T变量?

  20. 20

    为什么在未先将动作分配给任何东西的情况下调用动作是合法的?

  21. 21

    我们如何在不将ViewController对象推入UINavigationController的情况下将其分配给UINavigationController呢?

  22. 22

    如果在laravel5中没有DB :: commit()的情况下调用DB :: beginTransaction,会发生什么?

  23. 23

    如果在反引号中为命令表达式分配了变量,会发生什么情况

  24. 24

    如果未将返回值分配给变量,则未解决的函数重载

  25. 25

    XSLT将函数返回值分配给变量

  26. 26

    SQUIRREL:将函数的返回值分配给变量

  27. 27

    如果我的过程未定义变量,但在共享库中用作外部变量,会发生什么情况?

  28. 28

    当我们在 Bean 是单例的情况下调用 new Bean() 时会发生什么?

  29. 29

    如果我将函数主体而不是函数名称传递给setTimeout,会发生什么情况?

热门标签

归档