我最近了解了,运算符以及引入序列点的事实.
我还了解到以下代码导致了未定义的行为:
i = ++i;
Run Code Online (Sandbox Code Playgroud)
因为i在两个序列点之间修改了两次.
但是下面的代码怎么样?
i = 0, ++i;
i = (0, ++i);
Run Code Online (Sandbox Code Playgroud)
虽然我知道规则,但我无法得出结论.它是否定义了行为?
编辑:就像@paxdiablo提到,定义与否,这是一个应该避免的不好的做法.这个问题仅用于教育目的和更好地理解"规则".
我有以下课程:
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)
我知道这是不好的做法.但出于好奇:这是否有效?它是否定义了行为?
奖金问题:你有没有必要使用这样一个丑陋的黑客?
给定一个布尔值的容器(例如std::vector<bool>),是否存在标准函数,true如果所有值都是true("和")或者true至少有一个值是true("或"),则返回短路评估?
今天早上我在www.cplusplus.com上挖了一个但是找不到任何东西.
我自己找不到任何"好"答案的简单问题:
假设我有以下条件:
if 'foo' in mystring or 'bar' in mystring or 'hello' in mystring:
# Do something
pass
Run Code Online (Sandbox Code Playgroud)
or根据情况,声明的数量可以更长.
在不牺牲性能的情况下,是否有一种"更好"(更多Pythonic)的写法方式?
如果考虑使用,any()但它需要一个类似布尔元素的列表,所以我必须首先构建该列表(在此过程中放弃短路评估),所以我猜它效率较低.
非常感谢你.
我正在看的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) 我最近使用右移运算符遇到了一种奇怪的行为.
以下程序:
#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) 我必须创建一个必须在几个*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()不是一个选项.
今天早上我问自己一些事情,我找不到正确"谷歌"的话:
让我们说:
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所以问题主要是关于前两个.)
谢谢 !:)
我即将发布一个我在过去几周一直在工作的Python库.我已经阅读了很多关于Python依赖项的内容,但还不是很清楚:
有些人假装你永远不应该固定你的依赖版本,因为它会阻止你的库用户升级这些依赖项.
其他一些声称你应该总是固定你的依赖版本,因为它是保证你的发布以它开发它的方式工作的唯一方式,并防止依赖的重大变化在你的库中造成严重破坏.
我不知何故去了一个混合解决方案,在那里我假设我的依赖关系使用语义版本控制并仅固定主要版本号(比如说somelib >= 2.3.0, < 3),除非主要版本号是0(语义版本控制规定这些版本被认为是易变的并且可能会破坏API,即使只有补丁号被碰撞).
截至目前,我不确定哪种方式最好.是否有官方指南(甚至可能是PEP?),它规定了有关Python依赖关系的最佳实践以及如何指定它们?
有没有办法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++ ×8
c ×4
python ×2
algorithm ×1
assert ×1
bit-shift ×1
boolean ×1
casting ×1
conditional ×1
dependencies ×1
filesystems ×1
linux ×1
pip ×1
pod ×1
printf ×1
qt ×1
std ×1
translation ×1
validation ×1
versioning ×1