以下代码编译和工作:
#include <stdio.h>
void print(void* x)
{
printf("%d", *(int*)x);
}
int main()
{
print(&((struct { int x, y; }){ .x = 1, .y = 2 })); //outputs 1
return 0;
}
Run Code Online (Sandbox Code Playgroud)
为什么编译器允许我获取rvalue的地址?这是定义的行为吗?
似乎使用auto参数g ++只是首先auto遇到它.这是一个错误吗?
auto f(std::vector<auto> a)
{
a.push_back('0');
return std::string("");
}
Run Code Online (Sandbox Code Playgroud)
我有以下代码:
#include <iostream>
std::string eps("?");
int main()
{
std::cout << eps << '\n';
return 0;
}
Run Code Online (Sandbox Code Playgroud)
不知何故,它在Ubuntu上用g ++和clang编译,甚至打印出正确的字符?.我也有几乎同样的一段代码,它高兴地读取?与cin进std::string.顺便说一下,eps.size()是2.
我的问题是 - 它是如何工作的?我们如何将unicode字符插入std::string?我的猜测是操作系统使用unicode处理所有这些工作,但我不确定.
编辑
和输出一样,我知道终端负责向我展示正确的角色(在这种情况下为ε).
但是输入:cin读取符号' '或任何其他空格字符(并且我逐字节理解).所以,如果我采取?,哪个第二个字节是32 ' ',它将只读取第一个字节,然后停止.但它读到了?.怎么样?
假设我正在为某种编程语言编写编译器。通常将抽象语法树(AST)用作内部表示。我可以看到两种可能的设计方法:
boost::variant由于节点的层次结构是固定的,boost::variant因此就足够了。
我的问题是,从可维护性和运行时效率的角度来看,每种方法的优缺点是什么?
让我们假设我有pandas数据框,它有很多功能,我对两个感兴趣.我会打电话给他们feature1,并feature2.
feature1可以有三个可能的值.
feature2可以有两个可能的值.
我需要按条形图分组feature1并按行数计算每个值的值feature2.(这样会有三个堆叠,每个堆叠有两个柱子).
怎么做到这一点?
目前我有
import pandas as pd
df = pd.read_csv('data.csv')
df['feature1'][df['feature2'] == 0].value_counts().plot(kind='bar',label='0')
df['feature1'][df['feature2'] == 1].value_counts().plot(kind='bar',label='1')
Run Code Online (Sandbox Code Playgroud)
但这不是我真正想要的,因为它不会叠加它们.