这可能是不可能的,但我想知道是否有可能暂时不会超过其原始表达.我有一个指向父对象的对象链,以及一个将创建子对象的成员函数,这里有一个简化的例子
class person{
string name;
person * mommy;
public:
person(const string & nam, person * m = 0) : name(nam), mommy(m) {}
person baby(const string & nam){
return person(nam, this);
}
void talk() const{
if (mommy) mommy->talk();
cout << name << endl;
}
};
int main(){
person("Ann").baby("Susan").baby("Wendy").talk(); // fine
const person & babygirl = person("Julie").baby("Laura"); // not fine
babygirl.talk(); // segfault
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我想要使用的方法person是将它传递给一个函数,如下所示:
void use(const person & p) {
p.talk();
}
use(person("Anna").baby("Lisa"));
Run Code Online (Sandbox Code Playgroud)
很好.
只要没有一个临时表现在原始表达式之后,这就可以正常工作,但是如果我把一个最后的临时工具绑定到一个const引用,那么它的父母就无法生存,我得到一个段错误.我可以隐藏person复制构造函数和赋值运算符,但有什么方法可以防止这种错误发生?如果可能的话,我想避免动态分配.
我知道哈希表数据结构的基本原理.如果我有一个大小为N的哈希表,我必须尽可能均匀地将我的数据分配到这些N桶中.
但实际上,大多数语言都有自己的内置哈希表类型.当我使用它们时,我不需要事先知道哈希表的大小.我只是把我想要的东西放进去.例如,在Ruby:
h = {}
10000000.times{ |i| h[i]=rand(10000) }
Run Code Online (Sandbox Code Playgroud)
它怎么能这样做?
以下代码在Linux上运行正常但在OS X 10.7上引发异常:
#include <iostream>
#include <locale>
#include <stdexcept>
int main() try {
std::locale::global(std::locale(""));
std::cout << "Using locale: " << std::locale().name() << "\n";
}
catch (std::runtime_error const& e) {
std::cout << e.what() << "\n";
return 1;
}
Run Code Online (Sandbox Code Playgroud)
OS X上的输出是:
locale::facet::_S_create_c_locale名称无效
但是,标准明确地说明了这一点
该组有效的字符串参数值的是
"C",""和任何实现定义的值.
所以无论什么原因导致上述行为都违反了标准.
使用的编译器是clang ++ 3.1(tags/Apple/clang-318.0.58); 我也尝试过通过Homebrew安装的GCC 4.7,结果相同.
其他人可以验证这个问题吗?是什么导致的?我做错了吗?这是OS X中的错误吗?
(也许这与另一个xlocale问题有关,但错误实际上是完全不同的.)
我正在尝试执行以下操作:
class sig
{
public:
int p_list[4];
}
sig :: sig()
{
p_list[4] = {A, B, C, D};
}
Run Code Online (Sandbox Code Playgroud)
我收到一个错误
缺少构造函数中的表达式.
那么我如何初始化一个数组呢?
我有一个值,我想要对齐给定的对齐,即如果尚未对齐,则将值增加到对齐的下一个倍数.
在C++中执行此操作的简洁方法是什么?
例如
int x;
int alignment;
int y = ???; // align x to alignment
Run Code Online (Sandbox Code Playgroud) 我想为在Github上托管的R项目设置Travis CI,这不是一个包.不幸的是,官方的R Travis支持似乎与包裹相当硬(这是公平的,有道理).
有没有机会让这个工作非包装代码,或者是我唯一的求助分支r-travis并根据我的规格进行修补?我觉得很难做到这一点很容易.
这是我失败的Travis配置:
language: R
r_github_packages:
- klmr/modules
r_binary_packages:
- testthat
script: make test
Run Code Online (Sandbox Code Playgroud)
此操作失败,并显示以下错误:
命令
"Rscript -e 'deps <- devtools::install_deps(dependencies = TRUE);if (!all(deps %in% installed.packages())) { message("missing: ", paste(setdiff(deps, installed.packages()), collapse=", ")); q(status = 1, save = "no")}'"失败并在1期间退出.
这是有道理的:devtools::install_deps只适用于包的上下文.
我已经尝试通过添加install: true到我的配置来抑制安装步骤.但是,现在不再安装依赖项,因此构建失败了
loadNamespace(name)出错:没有名为'modules'的包
我试图NULL通过Rcpp从C++函数中无形地返回一个结果(事实上).不幸的是我无法找到如何做到这一点.我的第一次尝试是设置,R_Visible但不再导出此全局变量; 接下来,我尝试直接调用do_invisible(调用的原语invisible),但同样地,它不会被导出(说实话,我不确定如何正确调用它).
然后我走了迂回的路,base::invisible从Rcpp通过一个叫R's Rcpp::Function.我的代码现在是这样的:
Rcpp::Function invisible = Rcpp::Environment("package:base")["invisible"];
// [[Rcpp::export]]
SEXP read_value(Rcpp::XPtr<std::vector<int>> x, int index) {
try {
return Rcpp::wrap(x->at(index));
} catch (std::out_of_range const&) {
return invisible(R_NilValue);
}
}
Run Code Online (Sandbox Code Playgroud)
这编译并执行.不幸的是,这个invisible电话被忽略了; 当使用无效索引从R调用函数时,它会打印出来NULL.我希望它什么都不打印.
用于检测:
// [[Rcpp::export]]
Rcpp::XPtr<std::vector<int>> make_xvec() {
return Rcpp::XPtr<std::vector<int>>{new std::vector<int>{1, 2, 3}};
}
/*** R
xv = make_xvec()
read_value(xv, 1)
invisible(read_value(xv, 4)) # Works
read_value(xv, 4) # Doesn’t work
*/
Run Code Online (Sandbox Code Playgroud) 我正在使用 Stargazer 输出包含多个 lm 模型的回归表。问题是 Stargazer 默认在一行中输出 F 统计量和自由度。如果您有 3 或 4 个模型,则意味着 Latex 中的输出不必要地宽并且延伸到页面之外。
有一个选项可以使用以下方法隐藏自由度:
stargazer(lm1,lm2,lm3,lm4, df = F)
Run Code Online (Sandbox Code Playgroud)
但是,没有办法让它显示在两行上。
这是一个可重现的不良结果示例:
lm.out.1 <- lm(stack.loss ~ Air.Flow , data=stackloss)
lm.out.2 <- lm(stack.loss ~ Water.Temp, data=stackloss)
lm.out.3 <- lm(stack.loss ~ Acid.Conc., data=stackloss)
lm.out.4 <- lm(stack.loss ~ Air.Flow + Water.Temp, data=stackloss)
lm.out.5 <- lm(stack.loss ~ Air.Flow + Water.Temp + Acid.Conc., data=stackloss)
stargazer(lm.out.1,
lm.out.2,
lm.out.3,
lm.out.4,
lm.out.5)
Run Code Online (Sandbox Code Playgroud)
可以看到如何使用df=F选项以可打印的方式整齐有效地呈现该表:
stargazer(lm.out.1,
lm.out.2,
lm.out.3,
lm.out.4,
lm.out.5, df = F)
Run Code Online (Sandbox Code Playgroud)
但是,现在我们失去了有关自由度的信息。
有没有办法打印带有换行符的信息,以便它打印在表格的两行上? …
要创建当前时间的时间点,您可以使用:std::chrono::system_clock::now()。
但是,我不知道如何创建自 UNIX 纪元以来给定毫秒数的时间点?
另外,std::chrono::time_point甚至是推荐的方式来及时表示“瞬间”?还是应该std::time_t优先考虑?
我在 Linux 机器上使用套接字用 C 语言制作了一个服务器,它工作正常,但是当我尝试使用 Visual Studio 在 Windows 机器上运行它时,出现错误:
致命错误 C1083:无法打开包含文件:'sys/socket.h':没有这样的文件或目录
ide 告诉我找不到这个头文件。
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
Run Code Online (Sandbox Code Playgroud)