【问题标题】:What is the result of an initialization in C++?C++中初始化的结果是什么?
【发布时间】:2019-12-11 21:39:24
【问题描述】:

初始化的返回值是多少?例如: 在以下代码中;

#include<iostream>

int main()
{
    int age = 30;          //does this statement return (thus; yield) anything?

    while(int i = 0){      //a similar statement (expression) used here in this condition
        std::cout<<"OK";   
    }

    return 0;
}
  • int age = 27; 语句返回什么?
  • 通常的赋值运算符含义是否适用于初始化时,返回赋值运算符的左操作数?

我想知道这一点的原因是,当我们查看上面的条件语句时,我们会看到一个类似的变量初始化,该变量用作条件。我知道返回的任何值都会转换为 bool 类型。

注意:我并不想在 while 语句的条件下将 i 与 0 进行比较。

【问题讨论】:

  • @RPDF OP 明确提到这不是问题,问题是其他问题
  • 小心术语。 函数返回一个值,带有一个或多个return 语句。 表达式有一个值。它不会“返回”任何东西。
  • 在int age = 30; 中,=,尽管它看起来,并不是一个任务。这是一个初始化。在 C++ 中,该声明也可以写成 int age{30};,具有相同的含义。对于具有构造函数的对象类型,它有点复杂,但是,= 不是赋值。

标签: c++ initialization


【解决方案1】:

带有初始化器的声明语句只是一个声明语句,而不是一个表达式。它不产生值。你不能做类似int x = (int n = 42);的事情。

while 循环是一种特殊情况。您可以使用声明作为while 循环的条件。根据cppreference.com,

如果这是一个声明,初始化器在每个 迭代,并且如果声明的变量的值转换为 false,退出循环。

【讨论】:

  • 好的,谢谢。但这是否意味着这里使用了赋值运算符的含义?在这种情况下,声明产生一个整数类型,然后将其转换为布尔值?
  • 声明有一个初始化,而不是一个赋值。对于int,这可能是一个没有区别的区别,但可能对类类型有影响。声明不是产生一个值,而是一个用于控制循环的变量。 while 语句计算变量,是的,将int 转换为bool。 0 为假,非零为真。
  • 像if (int i = Calculate()) ... 这样的东西是某种特殊情况吗? (特别是谓词部分。)这在C 中也有效吗?
  • @Eljay:是的,it has the same sort of language for if。但是我没有找到for C这样的语言。
猜你喜欢
  • 2016-02-22
  • 2020-07-17
  • 2017-01-14
  • 2011-09-09
  • 2011-04-17
  • 2018-04-22
  • 2011-08-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多