小编fou*_*nes的帖子

而且,或者,不是与&&,||,!

是的,这是有效的C++:

if (false or (true and not false)) ...
Run Code Online (Sandbox Code Playgroud)

其中包括bitandxor.在C中,它们曾经是宏,但现在它们是关键字!你甚至可以超载他们!那么为什么有人会教或写类似的东西:

if (false || (true && !(false))) ...
Run Code Online (Sandbox Code Playgroud)

为什么没有人使用它们?

c++ logic keyword

11
推荐指数
1
解决办法
7974
查看次数

使用 {} 语法保证浮点成员初始化为零吗?

在C++17中,考虑这样一种情况:S一个结构体删除了默认构造函数,并且有一个float成员,当S用空大括号初始化时,标准是否保证float成员被零初始化?

struct A {
  int x{};
};

struct S
{
  S() = delete;
 
  A a;
  float b;
};

int main()
{
  auto s = S{}; // Is s.b guaranteed to be zero?
}
Run Code Online (Sandbox Code Playgroud)

在我看来,cppreference.com 并不清楚,都说:

如果初始值设定项子句的数量小于成员的数量且基数或初始值设定项列表完全为空,则剩余的成员和基数 (C++17 起) 将由其默认成员初始值设定项(如果在类定义中提供)进行初始化,否则(C++14 起) 根据通常的列表初始化规则,从空列表进行复制初始化(对具有默认构造函数的非类类型和非聚合类执行值初始化,并对聚合执行聚合初始化)。如果引用类型的成员是这些剩余成员之一,则程序格式错误。

来自这里),这意味着 b 保证为零

在所有情况下,如果使用空大括号对 {} 并且 T 是聚合类型,则执行聚合初始化而不是值初始化。

从这里

这意味着 b 不能保证为零。

还有一个讨论似乎暗示虽然不能保证,但所有已知的编译器都会进行零初始化:

该标准指定,当类具有用户提供或删除的默认构造函数时,不会执行零初始化,即使重载决策未选择该默认构造函数也是如此。如果选择了未删除的默认默认构造函数,所有已知的编译器都会执行额外的零初始化。

相关:如果显式默认或删除构造函数,为什么自 C++20 以来聚合初始化不再起作用?

c++ language-lawyer c++17

7
推荐指数
2
解决办法
891
查看次数

为什么#define和typedef操作数被反转?

以下定义A替换B:

#define A B
Run Code Online (Sandbox Code Playgroud)

而这定义A为该类型 的别名B:

typedef B A;
Run Code Online (Sandbox Code Playgroud)

为什么?这不连贯吗?

c typedef c-preprocessor

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

具有缺失数据的 numpy 数组的局部均值滤波器

我想对存储为 numpy 数组的图像进行局部平均滤波器。图像在边缘附近有一些缺失的像素,用有效的掩码(布尔数组)表示。

我可以使用skimage.filters.rank,但我的图像超出了[-1, 1]范围,出于某种原因,scikit-image 要求这样做。

还有astropy.convolution,但它会插入缺失的数据。对于简单的均值,无需进行插值。仅平均有效像素。输入和输出有效掩码相同。

简单地将无效像素设置为零不是一种选择,因为它会污染附近的有效像素平均值。

还有这个 question,但它不是重复的,因为它询问更通用的卷积(这只是平均)。

python numpy convolution scipy scikit-image

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

是不是内联过早优化?

可能重复:
C++中的内联函数

现代编译器在决定应该内联什么和不应该什么时,比程序员更好.就像register,不应该内联函数只是编译器的工作,并被认为是过早的优化?

c++ compiler-construction optimization inline

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

初始化一个constexpr std :: arrays对

在C ++ 14,我怎么初始化全局constexpr std::arraystd::pair包含文本字符串?以下内容不起作用:

#include <array>

constexpr std::array<std::pair<int, const char[]>, 3> strings = {
  {0, "Int"},
  {1, "Float"},
  {2, "Bool"}};

int main() {
}
Run Code Online (Sandbox Code Playgroud)

c++ arrays constexpr c++14

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

为什么Firefox和Chrome以不同的方式呈现"ಠ_ಠ"(U + 0CA0),即使我同时设置为UTF-8?

有问题的人物是?(U + 0CA0 ;ಠ).这是三个截图:

适用于Mac的Chrome 17

GC 17 Mac

Firefox 7 for Mac

FF 7 Mac

Firefox> 4 for Windows

FF 4胜利

我尝试的所有浏览器都使用UTF-8作为编码.这里是复制粘贴的?_?,但我不知道你是怎么看到它的.

unicode reddit character-encoding

2
推荐指数
1
解决办法
2051
查看次数

Haskell中id函数的类型

在GHCI中,类型id是:

Prelude> :t id
id :: a -> a
Run Code Online (Sandbox Code Playgroud)

但是,如果我定义自己的id函数,为什么是类型变量的名称t?有没有之间的差异ta

Prelude> let identity x = x
Prelude> :t identity
identity :: t -> t
Run Code Online (Sandbox Code Playgroud)

haskell

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

在Haskell中没有解构的变体上的模式匹配

在下面的代码中,函数disp通过解构来定义Sum b c,然后立即重建它.问题是,我不需要bc,只有一个事实,即它的类型Sum.

data Expr = Name String | Sum Expr Expr
    deriving(Show)

disp (Sum (Name a) (Sum b c)) = a ++ ":" ++ disp (Sum b c)
Run Code Online (Sandbox Code Playgroud)

disp没有这种解构的方式没有这种解构 - 重建(bc绑定),或者这是编写这样一个函数的正确方法?

haskell pattern-matching

2
推荐指数
1
解决办法
138
查看次数

不明确的类型引用

为什么这有效:

template <typename T> 
struct foo
{
};

struct A
{
    typedef foo<A> type;
};

struct B : public A
{
    typedef foo<B> type;
};

int main()
{
    B::type john;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

但不是这个:

template <typename T> 
struct foo
{
};

template <typename T>
struct Shared
{
    typedef foo<T> type;
};

struct A : public Shared<A>
{
};

struct B : public A, public Shared<B>
{
};

int main()
{
    // g++ 4.5 says :
    // error: reference to 'type' …
Run Code Online (Sandbox Code Playgroud)

c++ templates typedef multiple-inheritance

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