小编Dan*_*l H的帖子

是否有GCC警告使用C库中的符号而不是命名空间std?

考虑以下(错误)C++代码:

#include <cmath>
#include <cstdlib>

#include <iostream>

int main() {
    if (abs(-0.75) != 0.75) {
        std::cout << "Math is broken!\n";
        return 1;
    } else {
        return 0;
    }
}
Run Code Online (Sandbox Code Playgroud)

这段代码是错误的,因为它调用abs(含义::abs)而不是std::abs.取决于实现,::abs可能不存在,或者它可能是C abs,或者它可能是包含版本的重载集double,如std::absis.

在Linux上使用Clang,至少在我的环境中,它被证明是第二种选择:C abs.这引发了两个警告,即使没有明确启用任何警告:

<source>:7:9: warning: using integer absolute value function 'abs' when argument is of floating point type [-Wabsolute-value]
    if (abs(-0.75) != 0.75) {
        ^
<source>:7:9: note: use function 'std::abs' instead
    if (abs(-0.75) != 0.75) { …
Run Code Online (Sandbox Code Playgroud)

c++ gcc compiler-warnings global-namespace

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

在.NET中更改DateTimePicker的背景颜色

.NET(至少在2008版本中,也许在2005年也是如此),改变a的BackColor属性DateTimePicker对外观完全没有影响.如何更改文本区域的背景颜色,而不是下拉日历的背景颜色?

编辑:我说的是Windows表单,而不是ASP.

.net c# vb.net winforms

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

在C++中构造和初始化普通类型

一个普通的类很容易复制,并且有一个简单的默认构造函数(一个普通的类型是其中之一或类似工作的内置类).

由于可以使用memcpy复制琐碎类型的对象,并且由于缺省初始化琐碎类型不会改变任何在representation¹字节的,将执行以下操作的代码(使用C++ 20概念)正确地初始化passed-的副本在对象?

#include <cstdlib>
#include <cstring>

#include <new>
#include <type_traits>

template <typename T>
T* copy_trivial(T orig) requires std::is_trivial_v<T>
{
    void* buf = std::aligned_alloc(alignof(T), sizeof(T));

    // Note the order of these statements
    std::memcpy(buf, &orig, sizeof(T));
    return new(buf) T;
}
Run Code Online (Sandbox Code Playgroud)

(编译器资源管理器,提供了几个实例)

看起来这个代码可以工作,因为会有一个具有正确对象表示的初始化对象.但是,鉴于初始化没有任何反应,对象是否会有一个不确定的值 ²?


¹未在单个位置指定,但默认初始化的链接过程调用构造函数,必须隐式定义构造函数 ; 隐式定义的构造函数default-initialize所有成员和基础 ; 并且对于内置的普通类型,在没有初始化的情况下递归到底.

² [expr.new] p18.1中的注释表示它会,但注释是非规范性的,只有非放置的情况才是合理的new.

c++ initialization language-lawyer

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

将十六进制字符串的 JSON 列表反序列化为字节

I\xca\xbcm 尝试读取 JSON 流,其中一部分看起来像

\n
  "data": [\n    "c1a8f800a4393e0cacd05a5bc60ae3e0",\n    "bbac4013c1ca3482155b584d35dac185",\n    "685f237d4fcbd191c981b94ef6986cde",\n    "a08898e81f1ddb6612aa12641b856aa9"\n  ]\n
Run Code Online (Sandbox Code Playgroud)\n

(列表中有更多条目data,每个条目都更长,但这应该是说明性的;列表的长度和每个十六进制字符串的长度在编译时都是已知的)

\n

理想情况下,我\xca\xbcd想要一个单一的[u8; 64](实际大小在编译时已知),或者失败,a Vec<u8>,但我想\xca\xbcs更容易将其反序列化为aVec<[u8; 16]>并稍后合并它们。然而,我\xca\xbcm 甚至连这一点都遇到困难。

\n

hex板条箱有一种方法将单个十六进制字符串反序列化为 aVec或 的数组u8,但我可以\xca\xbct 弄清楚如何告诉 Serde 对列表的每个条目执行此操作。有没有一种简单的方法可以让 I\xca\xbcm 忽略,或者我需要编写自己的列表反序列化器?

\n

rust serde

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

我可以将指向 char 指针的指针直接分配给字符串文字吗?

我想知道是否可以将指向 char 的指针直接分配给字符串文字,而无需先将字符串文字分配给左值指针。通常,如果参数采用指向某个对象的指针,则可以使用 & 传递对象的地址,并且字符串文字似乎是(或至少衰减为) char 指针,因为您可以将它们分配给 char 指针。这就是为什么我期望以下其中一项能够发挥作用:

const char ** ppchar = &"StringLiteral"; // This doesn't compile

const char ** ppchar = (const char **)&"StringLiteral"; // This compiles, but...

std::cout << *ppchar;   // Throws an exception
Run Code Online (Sandbox Code Playgroud)

我预计至少其中第二个可以工作,因为在我看来“StringLiteral”至少会衰减为指针,因此:

const char** ppchar = (const char**) &"StringLiteral";
Run Code Online (Sandbox Code Playgroud)

第一个指针将指向字符串文字的地址。如果首先将字符串文字分配给左值指针,则第一个指针将指向第二个指针,该指针本质上保存着其地址。对我来说似乎是一样的。

编辑:另外,我似乎可以这样做:

const char * _pptr = (const char*)&"StringLiteral";
std::cout << _pptr; // Prints "Hello"
Run Code Online (Sandbox Code Playgroud)

因此,似乎没有禁止直接分配给字符串文字的规则。

编辑:正如对许多人来说显而易见的那样,我的间接级别是错误的。来自莫斯科的弗拉德在他的回答中解释了这一点。在:

const char ** pptr = (const char**)&"StringLiteral";
Run Code Online (Sandbox Code Playgroud)

编译器期望 pptr 指向存储字符地址的内容,而我已将其分配给“StringLiteral”本身的地址,这意味着当我 cout 时,它会取消引用第一个指针以查找哪个地址找到该字符。问题是它直接指向“StringLiteral”的地址,这意味着它使用“StringLiteral”的第一个字母的值作为要查找字符的地址,基本上它会使用“S”作为地址要去。讨厌这么厚。

c++ pointers string-literals

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

python正则表达式匹配并替换字符串的开头和结尾但保留中间

我有一个带有假日名称的数据框。我有一个问题,在某些日子里,假期是在不同的日子里观察到的,有时是在另一个假期的那一天。以下是一些示例问题:

1  "Independence Day (Observed)"
2  "Christmas Eve, Christmas Day (Observed)"
3  "New Year's Eve, New Year's Day (Observed)"
4  "Martin Luther King, Jr. Day"
Run Code Online (Sandbox Code Playgroud)

我想将所有 ' (Observed)' 替换为 '' 以及仅当匹配 ' (Observed)' 时逗号前的所有内容。输出应该是:

1  "Independence Day"
2  "Christmas Day"
3  "New Year's Day"
4  "Martin Luther King, Jr. Day"
Run Code Online (Sandbox Code Playgroud)

我能够独立完成这两项工作:

(foo['holiday']
 .replace(to_replace=' \(Observed\)', value='', regex=True)
 .replace(to_replace='.+, ', value='', regex=True))
Run Code Online (Sandbox Code Playgroud)

但这给“小马丁·路德·金”带来了问题。

python regex replace pandas

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