相关疑难解决方法(0)

链式作业如何运作?

来自某事的引用:

>>> x = y = somefunction()
Run Code Online (Sandbox Code Playgroud)

是相同的

>>> y = somefunction()
>>> x = y
Run Code Online (Sandbox Code Playgroud)

问题:是

x = y = somefunction()
Run Code Online (Sandbox Code Playgroud)

同样的

x = somefunction()
y = somefunction()
Run Code Online (Sandbox Code Playgroud)

根据我的理解,它们应该是相同的,因为somefunction只能返回一个值.

python python-3.x

29
推荐指数
5
解决办法
9479
查看次数

可读性a = b = c或a = c; B = C;?

比方说,我有一个有一组整数的类

foo()
{
  int a;
  int b;
  int c;
  int d;
  ....
  string s;
}
Run Code Online (Sandbox Code Playgroud)

现在的问题是最好的可读性,foo()的init()函数,如果它看起来像

void init()
{
  a=b=c=d=1; //for some reason they are init to 1;
  s = "abc";
}
Run Code Online (Sandbox Code Playgroud)

要么

void init()
{
  a=1;
  b=1;
  c=1;
  d=1;
  s = "abc";
}
Run Code Online (Sandbox Code Playgroud)

类中字符串的原因是可能存在其他相同类型的组的提示,当然,类可能会随着需求的变化而增长

编辑:在这个问题走得太远之前,这个问题的意图很简单:在Effective C++第12项中(更喜欢初始化到构造函数中的赋值),Scott使用链赋值而不是a = c; B = C; 我确定他知道什么时候使用什么,但我也记得我读过的书也建议使用int a; int b; 在类似的作业情况下.在我的程序中我有一个类似的情况,需要初始化一组相关的单个内置类型,我发现通过使链分配确实使它更容易阅读,特别是如果类有许多其他不同类型的实例变量.它似乎与我读过的书和我的记忆相矛盾,因此这个问题.

c# c++

26
推荐指数
3
解决办法
4万
查看次数

一条线上有两个相同的标志?

有人可以解释这是什么以及它是如何合法的C代码?我在此代码中找到了这一行:http://code.google.com/p/compression-code/downloads/list,这是用于自适应霍夫曼编码的Vitter算法的C实现

ArcChar = ArcBit = 0;
Run Code Online (Sandbox Code Playgroud)

从功能:

void arc_put1 (unsigned bit)
{
    ArcChar <<= 1;

    if( bit )
        ArcChar |= 1;

    if( ++ArcBit < 8 )
        return;

    putc (ArcChar, Out);
    ArcChar = ArcBit = 0;
}
Run Code Online (Sandbox Code Playgroud)

ArcChar是一个int而ArcBit是一个unsigned char

c

17
推荐指数
5
解决办法
1万
查看次数

以下链式赋值是否会导致未定义的行为?

以下代码是否调用未定义的行为C

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

我知道以下内容调用UB:

a = b = a++;
Run Code Online (Sandbox Code Playgroud)

原因是它违反了标准中的以下条款:

在前一个和下一个序列点之间,对象的存储值最多只能通过表达式的计算来修改一次.此外,只能访问先前值以确定要存储的值.

但是,第一个代码段不违反此条款.一位同事说这种说法a = b = a+1也可能意味着

a = a + 1;
b = a + 1;
Run Code Online (Sandbox Code Playgroud)

要么

b = a + 1;
a = b;
Run Code Online (Sandbox Code Playgroud)

我认为,由于"从右到左"的相关性=,它总是必须意味着a = (b = (a+1)),而不是

a = a + 1;
b = a + 1;
Run Code Online (Sandbox Code Playgroud)

不过,我并不积极.是UB吗?

c undefined-behavior

6
推荐指数
1
解决办法
212
查看次数

标签 统计

c ×2

c# ×1

c++ ×1

python ×1

python-3.x ×1

undefined-behavior ×1