GCC(4.7.2)-Wextra发出以下警告/错误信号(我已-Werror启用):
由于数据类型的范围有限,比较总是如此[-Wtype-limits]
对于以下代码[ 在线试用 ]:
template <
typename T,
std::size_t N,
bool = static_cast<std::size_t>(std::numeric_limits<T>::max()) < N>
struct validator {
static constexpr bool validate(T value) {
return static_cast<std::size_t>(value) < N;
}
};
template <typename T, std::size_t N>
struct validator<T, N, true> {
static constexpr bool validate(T) {
return true;
}
};
int main() {
// Works
static_assert(validator<int, 4>::validate(3), "Invalid");
// Error :-(
static_assert(validator<bool, 2>::validate(true), "Invalid");
}
Run Code Online (Sandbox Code Playgroud)
我理解为什么警告会在正常的表达式上下文中发生,例如,当我使用以下validate函数时:
template <typename T, std::size_t N>
bool validate(T value) …Run Code Online (Sandbox Code Playgroud) 我怎样才能重构以下C++代码?我在我的程序中使用C++ 11
void f(int a, int b, int c, int d, int e, int f) {
// MAX1..MAX6 are constants, N1..N6 are constants
if( a > MAX1) {
.. code block 1..
}
else if(b > MAX2) {
.. code block 2..
}
else if(c > MAX3) {
.. code block ..
}
else if(d > MAX4) {
.. code block 3 ..
}
else if(e > MAX5) {
.. code block 4 ..
}
else if(f > MAX6) { …Run Code Online (Sandbox Code Playgroud) 我正在使用Visual Studio 2012,尝试使用默认编译器和Nov CTP编译器,下面显示了我的问题:
struct doesCompile
{
int mA, mB, mC, mD, mE;
doesCompile(int a, int b, int c, int d, int e) : mA(a), mB(b), mC(c), mD(d), mE(e)
{
}
};
struct doesNotCompile
{
int mA, mB, mC, mD, mE, mF;
doesNotCompile(int a, int b, int c, int d, int e, int f) : mA(a), mB(b), mC(c), mD(d), mE(e), mF(f)
{
}
};
int _tmain(int argc, _TCHAR* argv[])
{
std::vector<doesCompile> goodVec;
goodVec.emplace_back(1, 2, 3, 4, 5);
std::vector<doesNotCompile> badVec;
badVec.emplace_back(1, …Run Code Online (Sandbox Code Playgroud) 我正在尝试对数据运行条件逻辑回归,类似于以下示例:
table.10.3 <- data.frame(pair=rep(1:144,rep(2,144)),
MI=rep(c(0,1),144),
diabetes=c(rep(c(1,1),9),
rep(c(1,0),16),
rep(c(0,1),37),
rep(c(0,0),82))
)
# head(table.10.3)
# pair MI diabetes
# 1 0 1
# 1 1 1
# 2 0 1
# 2 1 1
# 3 0 1
# 3 1 1
library("survival")
fit.CLR <- clogit(MI ~ diabetes + strata(pair), method="exact", data=table.10.3)
summary(fit.CLR)
Run Code Online (Sandbox Code Playgroud)
我得到了摘要.我的问题是如何以图形方式表示结果?我需要保持,因为我对R绘图很新.我试过vcd包.我能够得到一些其他虚拟数据的马赛克图.但我想绘制clogit模型的结果.
我遇到了一些标签问题.我在r中做条形图,我有点震惊,没有一个简单的命令只是将值放在顶部.无论如何,我希望这些标签在条形图中更加居中并缩短有效数字,以便它们适合条形图.我也很感激有关如何简化这一点的任何建议.
我尝试了选项(数字= 5),这对标签不起作用.我已经使用了文本(plot.name,tmp,labels = c(tmp)但是想尝试不使用它来使它变得更简单.我必须重新制作很多情节.
tmp = c(mean(1.0000001:100),mean(100.0000001:200), mean(200.0000001:300), mean(300.0000001:400))
barplot(tmp, names=c("site 1", "site 2", "site 3", "site 4") )
text(1:4, tmp, label=tmp, pos=2, srt=90)
Run Code Online (Sandbox Code Playgroud) 以下MWE无法编译(通过devtools::document()):
#' MWE
#'
#' @examples
#' format('{}') # Works
#' format('{') # Nope
#' format('\{') # Nope
#' format('\\{')# Nope
format = function (str) {}
Run Code Online (Sandbox Code Playgroud)
无论我包含哪些"Nope"行,它总是会因错误而失败
氧气块开始失败mwe.r:1
不匹配的支架......
根据我对Rd文档的阅读,这应该通过转义括号来工作.然而,如上图所示,这并不能正常工作.我做错了什么或者这是Roxygen中的错误?
当我使用单一转义版本(format('\{'))时,一个提示可能是Roxygen错误是完整的错误消息:
不匹配的大括号:
"@example format('{}') # Works format('\\{') # Nope"
请注意,输入中的单个反斜杠在输出中加倍.
绘制网络时,如果节点的标签也可以避开网络边缘,那将是很好的选择。例如,在下面的示例中,可以将所有标签移到网络外部。我已经尝试了几个软件包,但是到目前为止,还没有找到一种可行的方法。有办法吗?下面的例子:
library(ggraph)
library(tidygraph)
reprex <- tibble(to = sample(1:10, 100,replace=T),
from = sample(1:10, 100,replace=T)
) %>%
as_tbl_graph()
V(reprex)$label1 <- rep("label",10)
reprex_plot <- reprex %>%
ggraph() +
geom_node_point() +
geom_edge_link(color="grey")+
geom_node_text(aes(label=label1),repel=T,force=100)+
theme_bw()
reprex_plot
Run Code Online (Sandbox Code Playgroud)
I'm moving some C++17 code to be used in a project that is built with Qt, on Windows, using MinGW 7.3.0, and noticed something weird happening in the 32bit builds:
#include <cstddef>
#include <iostream>
int main() {
std::cout << __STDCPP_DEFAULT_NEW_ALIGNMENT__ << std::endl;
std::cout << __BIGGEST_ALIGNMENT__ << std::endl;
std::cout << sizeof(std::max_align_t) << std::endl;
std::cout << alignof(std::max_align_t) << std::endl;
std::cout << "----------------------------------------" << std::endl;
for (int i = 0; i < 8; ++i) {
const uintptr_t ptr = uintptr_t(new char);
static const …Run Code Online (Sandbox Code Playgroud) 根据C++ Primer,我们可以为定义为 extern 的变量提供初始值设定项,但这样做会覆盖 extern。具有初始值设定项的 extern 是一个定义:
extern double pi = 3.1416; // definition
Run Code Online (Sandbox Code Playgroud)
书中还指出,在函数内部为 extern 提供初始值设定项是错误的。在我看来,这两个陈述加在一起有点令人困惑,它们在我脑海中引起了以下问题:
如果在任何函数外部的 extern 上提供初始化程序可以覆盖 extern,为什么不能在函数内部的 extern 上提供它?
我也不明白为什么有人想要获得添加 extern 关键字的声明并提供初始值设定项。这与定义变量并为其提供初始化程序不一样吗?如果不是,为什么?答案是我们不能在函数内部为 extern 提供初始值设定项的原因吗?
我的问题只是为了了解 R 语言的一项功能是如何工作的。在任何好的 R 版本附带的“R 语言定义”中,有一些内容解释了例如向量元素的设置如何与看起来像赋值但并不那么简单的东西一起工作:
x[3:5] <- 13:15
Run Code Online (Sandbox Code Playgroud)
是一个快捷方式:
`*tmp*` <- x
x <- "[<-"(`*tmp*`, 3:5, value=13:15)
rm(`*tmp*`)
Run Code Online (Sandbox Code Playgroud)
我不明白的是为什么使用中间符号*tmp*而不是直接用 setter 函数来做这件事的原因。
x <- "[<-"(x, 3:5, value=13:15)
Run Code Online (Sandbox Code Playgroud)
到现在为止,我一直怀疑它与垃圾收集有关,但由于这个随着 v4 发生了显着变化,而且文档没有改变,我现在怀疑我错了。有人可以解释一下吗?
谢谢
c++ ×5
r ×5
c++11 ×2
boxplot ×1
comparison ×1
default ×1
extern ×1
ggraph ×1
ggrepel ×1
label ×1
mingw ×1
new-operator ×1
plot ×1
rd ×1
refactoring ×1
roxygen2 ×1
stl ×1
templates ×1
vector ×1
visual-c++ ×1