相关疑难解决方法(0)

C++ std :: tuple破坏顺序

有一条规则说明std :: tuple的成员被破坏了吗?

例如,如果Function1返回一个std::tuple<std::unique_ptr<ClassA>, std::unique_ptr<ClassB>>to Function2,那么我可以确定(当Function2剩下的范围时)ClassB第二个成员ClassA引用的实例在第一个成员引用的实例之前被销毁吗?

std::tuple< std::unique_ptr< ClassA >, std::unique_ptr< ClassB > > Function1()
{
    std::tuple< std::unique_ptr< ClassA >, std::unique_ptr< ClassB > > garbage;
    get<0>(garbage).reset( /* ... */ );
    get<1>(garbage).reset( /* ... */ );
    return garbage;
}

void Function2()
{
    auto to_be_destroyed = Function1();
    // ... do something else

    // to_be_destroyed leaves scope
    // Is the instance of ClassB destroyed before the instance of ClassA?
}
Run Code Online (Sandbox Code Playgroud)

c++ std c++11 stdtuple

46
推荐指数
3
解决办法
2752
查看次数

变量列表中的逗号是序列点吗?

在下面的代码类型中,每个变量构造之间是否有一个序列点,或者结果是否未定义?

int a = 0;
int b = a++, c = a++;
Run Code Online (Sandbox Code Playgroud)

我无法在标准中找到这里对序列点的具体引用.这是否意味着它是未定义的,或者只是我在搜索中失败了?表达式的完成是一个序列点,但上面的初始化也算了吗?

c++ variables comma sequence-points

21
推荐指数
2
解决办法
1230
查看次数

C++:变量声明初始化顺序

当我定义一些像这样的变量时:

int a = pop(), b = pop(), c = pop();
Run Code Online (Sandbox Code Playgroud)

C++是否提供了a首先被初始化的保证,b然后c呢?或者订单没有定义?

c++

15
推荐指数
1
解决办法
1202
查看次数

`int a = 0,b = a`是否有未定义的行为?

问题标题说明了一切:表单的声明int a = 0, b = a是否有未定义的行为?

c++ declaration undefined-behavior

13
推荐指数
2
解决办法
642
查看次数

它是C语句的声明和初始化语句中的逗号运算符吗?

我正在阅读C编程语言,发现这句话:

在声明中分隔...变量的逗号...不是逗号运算符,也不保证从左到右的评估.

如果是这样,他们是否在此代码中使用逗号运算符?

int a=1, b=a+1, c=b+a+1, d=c+b+a+1;
Run Code Online (Sandbox Code Playgroud)

我很确定它会起作用.但如果它们不是逗号运算符并且不保证从左到右的顺序,则上述语句可能会失败,对吧?

c comma-operator

4
推荐指数
1
解决办法
1236
查看次数

当 a 是代码块时使用逗号运算符 (a, b)

#include <stdio.h>

int main()
{
    int sum = 0, result = (({for (int i = 0; i < 5; i++) sum += i;}), sum);
    
    printf("result = %d\n", result);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

显示

result = 10
Run Code Online (Sandbox Code Playgroud)

我正在使用 gcc 中 C 的默认版本。它特定于 gcc 吗?我知道(a, b)回报b,但我没想到它会在阻塞时发挥a作用{}。谁能解释它为什么起作用以及为什么必须将块括起来才能使其起作用?

#define编辑:这是我正在尝试的一个人为的简化示例。一些程序员的评论(谢谢)澄清了这一点。案件结案。

c gcc gcc-statement-expression

4
推荐指数
1
解决办法
165
查看次数