小编ere*_*eOn的帖子

是i = 0,++我定义了吗?

我最近了解了,运算符以及引入序列点的事实.

我还了解到以下代码导致了未定义的行为:

i = ++i;
Run Code Online (Sandbox Code Playgroud)

因为i在两个序列点之间修改了两次.

但是下面的代码怎么样?

i = 0, ++i;
i = (0, ++i);
Run Code Online (Sandbox Code Playgroud)

虽然我知道规则,但我无法得出结论.它是否定义了行为?

编辑:就像@paxdiablo提到,定义与否,这是一个应该避免的不好的做法.这个问题仅用于教育目的和更好地理解"规则".

c c++

23
推荐指数
2
解决办法
831
查看次数

私人成员黑客定义的行为?

我有以下课程:

class BritneySpears
{
  public:

    int getValue() { return m_value; };

  private:

    int m_value;
};
Run Code Online (Sandbox Code Playgroud)

哪个是外部库(我无法更改).我显然无法改变它的价值m_value,只能读它.即使是衍生BritneySpears也行不通.

如果我定义以下类,该怎么办:

class AshtonKutcher
{
  public:

    int getValue() { return m_value; };

  public:

    int m_value;
};
Run Code Online (Sandbox Code Playgroud)

然后做:

BritneySpears b;

// Here comes the ugly hack
AshtonKutcher* a = reinterpret_cast<AshtonKutcher*>(&b);
a->m_value = 17;

// Print out the value
std::cout << b.getValue() << std::endl;
Run Code Online (Sandbox Code Playgroud)

我知道这是不好的做法.但出于好奇:这是否有效?它是否定义了行为?

奖金问题:你有没有必要使用这样一个丑陋的黑客?

编辑:只是为了吓唬更少的人:我不打算在实际代码中实际执行此操作.我是在想 ;)

c++ casting private-members

22
推荐指数
2
解决办法
1939
查看次数

有没有像"std :: and"或"std :: or"这样的东西?

给定一个布尔值的容器(例如std::vector<bool>),是否存在标准函数,true如果所有值都是true("和")或者true至少有一个值是true("或"),则返回短路评估?

今天早上我在www.cplusplus.com上挖了一个但是找不到任何东西.

c++ algorithm boolean std short-circuiting

22
推荐指数
3
解决办法
3486
查看次数

有没有更好的方法在Python中编写连续的"或"语句?

我自己找不到任何"好"答案的简单问题:

假设我有以下条件:

if 'foo' in mystring or 'bar' in mystring or 'hello' in mystring:
    # Do something
    pass
Run Code Online (Sandbox Code Playgroud)

or根据情况,声明的数量可以更长.

在不牺牲性能的情况下,是否有一种"更好"(更多Pythonic)的写法方式?

如果考虑使用,any()但它需要一个类似布尔元素的列表,所以我必须首先构建该列表(在此过程中放弃短路评估),所以我猜它效率较低.

非常感谢你.

python conditional

22
推荐指数
2
解决办法
703
查看次数

我误解了assert()的用法吗?

我正在看assert()参考页,虽然我读给定的例子,我卡住了:

/* assert example */
#include <stdio.h>
#include <assert.h>

int main ()
{
  FILE * datafile;
  datafile=fopen ("file.dat","r");
  assert (datafile);

  fclose (datafile);

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

在此示例中,如果datafile比较等于0,则assert用于中止程序执行,这在前一次调用fopen时不成功.

我完全同意,如果fopen()失败,assert()将中止执行.但是我担心这个例子的正确性:

在我看来assert()是检测通常不会发生的情况(比如传递一个NULL指向函数的指针,该函数的文档声明它是被禁止的).

在此示例中,无法打开文件不是通常不会发生的事情.事实上,我可以看到为什么会失败的几十个原因.该文件不存在,程序可以在没有所需权限的情况下运行,依此类推.

我宁愿做类似的事情:

/* not longer an assert example */
#include <stdio.h>
#include <assert.h>

int main ()
{
  FILE * datafile;
  datafile=fopen ("file.dat","r");

  if (datafile != NULL)
  {
    // Do something, whatever.
    fclose (datafile);
  } else
  { …
Run Code Online (Sandbox Code Playgroud)

c c++ assert

21
推荐指数
1
解决办法
1419
查看次数

右移算子的奇怪行为(1 >> 32)

我最近使用右移运算符遇到了一种奇怪的行为.

以下程序:

#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <stdint.h>

int foo(int a, int b)
{
   return a >> b;
}

int bar(uint64_t a, int b)
{
   return a >> b;
}

int main(int argc, char** argv)
{
    std::cout << "foo(1, 32): " << foo(1, 32) << std::endl;
    std::cout << "bar(1, 32): " << bar(1, 32) << std::endl;
    std::cout << "1 >> 32: " << (1 >> 32) << std::endl; //warning here
    std::cout << "(int)1 >> (int)32: " << ((int)1 …
Run Code Online (Sandbox Code Playgroud)

c c++ bit-manipulation bit-shift

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

printf还有其他选择吗?

我必须创建一个必须在几个*nix平台(Linux,AIX,...)上运行的软件.

我需要处理国际化,我的翻译字符串采用以下形式:

"Hi %1, you are %2." // English
"Vous êtes %2, bonjour %1 !" // French
Run Code Online (Sandbox Code Playgroud)

这里%1代表名称,%2换句话说.我可以改变格式,这不是问题.

我尝试使用printf()但你不能指定参数的顺序,你只需指定它们的类型.

"Hi %s, you are %s"
"Vous êtes %s, bonjour %s !"
Run Code Online (Sandbox Code Playgroud)

现在无法知道用于替换的参数%s:printf()只使用第一个参数,然后使用下一个参数.

有什么替代方案printf()吗?

注意:gettext()不是一个选项.

c c++ linux printf translation

21
推荐指数
4
解决办法
5275
查看次数

C++中的默认初始化

今天早上我问自己一些事情,我找不到正确"谷歌"的话:

让我们说:

struct Foo
{
  int bar;
};

struct Foo2
{
   int bar;
   Foo2() {}
};

struct Foo3
{
   int bar;
   Foo3() : bar(0) {}
};
Run Code Online (Sandbox Code Playgroud)

现在,如果我默认实例化Foo,Foo2并且Foo3:

Foo foo;
Foo2 foo2;
Foo3 foo3;
Run Code Online (Sandbox Code Playgroud)

在哪种情况下,bar会员是否正确初始化

(Foo3显然很明显地初始化它,并且只在这里显示明确差异Foo2所以问题主要是关于前两个.)

谢谢 !:)

c++ initialization pod

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

我应该固定我的Python依赖版本吗?

我即将发布一个我在过去几周一直在工作的Python库.我已经阅读了很多关于Python依赖项的内容,但还不是很清楚:

有些人假装你永远不应该固定你的依赖版本,因为它会阻止你的库用户升级这些依赖项.

其他一些声称你应该总是固定你的依赖版本,因为它是保证你的发布以它开发它的方式工作的唯一方式,并防止依赖的重大变化在你的库中造成严重破坏.

我不知何故去了一个混合解决方案,在那里我假设我的依赖关系使用语义版本控制并仅固定主要版本号(比如说somelib >= 2.3.0, < 3),除非主要版本号是0(语义版本控制规定这些版本被认为是易变的并且可能会破坏API,即使只有补丁号被碰撞).

截至目前,我不确定哪种方式最好.是否有官方指南(甚至可能是PEP?),它规定了有关Python依赖关系的最佳实践以及如何指定它们?

python versioning dependencies pip semantic-versioning

21
推荐指数
3
解决办法
3528
查看次数

检查字符串是否是Qt的有效文件名

有没有办法Qt 4.6检查给定的QString是当前操作系统上的有效文件名(或目录名)?我想检查名称是否有效,而不是文件存在.

例子:

// Some valid names
test
under_score
.dotted-name

// Some specific names
colon:name // valid under UNIX OSes, but not on Windows
what? // valid under UNIX OSes, but still not on Windows
Run Code Online (Sandbox Code Playgroud)

我怎么做到这一点?有一些Qt内置功能吗?

我想避免创建一个空文件,但如果没有其他可靠的方法,我仍然希望看到如何以"干净"的方式做到这一点.

非常感谢.

c++ filesystems validation qt

19
推荐指数
2
解决办法
2万
查看次数