小编Clo*_*ees的帖子

Clang VS VC++:"错误:'T'阴影模板参数的声明"

我试图使用clang 3.3在我的Mac上为经典的复制和交换习惯编译以下代码

template<typename T> class node{

private:
    node<T>* left;
    node<T>* right;
    T value;

public:
    friend void swap(node<T>&, node<T>&);
    // other stuff
}
Run Code Online (Sandbox Code Playgroud)

然而链接器抱怨道.我现在明白我应该将该函数声明为模板.但是,如果我遵循建议的风格,将出现的错误这里从MSDN:

template <class T> class Array {
    T* array;
    int size;

public:template<class T>
    //...
    template <class T>
    friend Array<T>* combine(Array<T>& a1, Array<T>& a2);
};
Run Code Online (Sandbox Code Playgroud)

我做了复制粘贴,但得到以下错误:

te.cpp:33:19: error: declaration of 'T' shadows template parameter
template<class T>
               ^
te.cpp:4:17: note: template parameter is declared here
template <class T> class Array {
                ^
1 error generated.
Run Code Online (Sandbox Code Playgroud)

这是一个铿锵的bug吗?MSDN网站建议它在VC++下运行. …

c++ templates llvm-clang

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

(右值引用)VS(const左值引用)作为C++ 11中的函数参数

当作为函数参数工作时,有人能解释何时rvalue引用优于const lvalue引用?

背景:我试图将一个const指针传递给一个函数.由于我必须考虑传入本地指针并传入临时的情况(例如从函数调用返回),我有两个选择:参数可以声明为:

void foo(T const* const&); //const lvalue ref to const ptr
Run Code Online (Sandbox Code Playgroud)

要么

void foo(T const* &&); //rvalue ref to const ptr
Run Code Online (Sandbox Code Playgroud)

但是这个rvalue引用不能绑定到局部变量(它是左值类型.但我确实记得Scott Meyers创造了术语"通用引用"来引用右值引用.这让我更加困惑.)所以我的问题是,因为第一个声明可以处理这两种情况,第二个使用右值引用的时候是首选吗?

注意:在第一种方法中,其他形式

void foo(const const T* &); 
void foo(const T* const&); 
Run Code Online (Sandbox Code Playgroud)

没用.我想原因是在后两者中我在const限定符的位置上并不一致(如果我错了,请纠正我).

c++ rvalue-reference c++11

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

在cygwin中使用clang的神秘链接器错误"未定义引用`__gxx_personality_v0'"

我做了一些搜索,所有答案似乎都表明使用clang ++而不是clang(或者更确切地说是g ++代替gcc),这就是我首先要做的.尽管如此,问题依然存在

clang++ -Wall -std=c++11 -o test.exe test.cpp A.cpp B.cpp etc.cpp
Run Code Online (Sandbox Code Playgroud)

要么

clang++ -lstdc++ -Wall -std=c++11 -o test.exe test.cpp A.cpp B.cpp etc.cpp
Run Code Online (Sandbox Code Playgroud)

编译和链接适用于Cygwin中的g ++.

g++ -Wall -std=c++11 -o test.exe test.cpp A.cpp B.cpp etc.cpp
Run Code Online (Sandbox Code Playgroud)

更新:

这是链接期间的信息.clang是否试图使用gcc进行链接,而不是使用g ++?在那种情况下,为什么没有标记-lstdc ++和-lsupc ++,如下所示,工作?

COMPILER_PATH=/usr/lib/gcc/x86_64-pc-cygwin/4.8.3/:/usr/lib/gcc/x86_64-pc-cygwin/4.8.3/:/usr/lib/gcc/x86_64-pc-cygwin/:/usr/lib/gcc/x86_64-pc-cygwin/4.8.3/:/usr/lib/gcc/x86_64-pc-cygwin/:/usr/lib/gcc/x86_64-pc-cygwin/4.8.3/../../../../x86_64-pc-cygwin/bin/
LIBRARY_PATH=/usr/lib/gcc/x86_64-pc-cygwin/4.8.3/:/usr/lib/gcc/x86_64-pc-cygwin/4.8.3/../../../../x86_64-pc-cygwin/lib/../lib/:/usr/lib/gcc/x86_64-pc-cygwin/4.8.3/../../../../lib/:/lib/../lib/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-pc-cygwin/4.8.3/../../../../x86_64-pc-cygwin/lib/:/usr/lib/gcc/x86_64-pc-cygwin/4.8.3/../../../:/lib/:/usr/lib/
COLLECT_GCC_OPTIONS='-v' '-std=c++11' '-m64' '-o' 'testReSampling.exe' '-shared-libgcc' '-mtune=generic' '-march=x86-64'
 /usr/lib/gcc/x86_64-pc-cygwin/4.8.3/collect2.exe --build-id -m i386pep --wrap _Znwm --wrap _Znam --wrap _ZdlPv --wrap _ZdaPv --wrap _ZnwmRKSt9nothrow_t --wrap _ZnamRKSt9nothrow_t --wrap _ZdlPvRKSt9nothrow_t --wrap _ZdaPvRKSt9nothrow_t -Bdynamic --dll-search-prefix=cyg --tsaware -o testReSampling.exe /usr/lib/gcc/x86_64-pc-cygwin/4.8.3/../../../../lib/crt0.o /usr/lib/gcc/x86_64-pc-cygwin/4.8.3/crtbegin.o -L/usr/lib/gcc/x86_64-pc-cygwin/4.8.3 -L/usr/lib/gcc/x86_64-pc-cygwin/4.8.3/../../../../x86_64-pc-cygwin/lib/../lib -L/usr/lib/gcc/x86_64-pc-cygwin/4.8.3/../../../../lib -L/lib/../lib …
Run Code Online (Sandbox Code Playgroud)

c++ gcc cygwin clang

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

在 JNI 实现中创建静态全局变量是否不好?

我是 JNI 新手,所以这个天真的问题的答案可能是肯定的。

目前的问题是我正在实现 JNI 绑定到某些 C 库来完成繁重的工作。

在进行实际计算之前,C 库需要首先从共享内存加载辅助数据结构(并返回指向“大”结构的指针),或者如果该结构在共享内存中不可用,则通过提供的路径从磁盘加载记忆。

辅助结构将用作const.

为了避免每次都从磁盘加载,我正在考虑的是创建一个static int表示大结构已正确初始化的信号:

static int big_struct_loaded_in_mem = 0;

void Java_className_dowork(/*parameters*/){
    if(!big_struct_loaded_in_mem){
        // load struct
        big_struct_loaded_in_mem = 1;
    }
    // load from shared mem then do work using big_struct
    load_from_shm();
}

void Java_className_cleanup(/*parameters*/){
    //free up mem
    big_struct_loaded_in_mem = 0;
}
Run Code Online (Sandbox Code Playgroud)

为了简单起见,假设 Java 调用方和本机函数是单线程的。

非常感谢!

注意:当然,没有 的简单修复static int可能只是load_from_shm()每次调用并测试返回的指针,但我很好奇这个特定的想法是否不好:即在 JNI 绑定中创建静态全局变量。

c java performance java-native-interface static

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

作为参数的临时T是否应该在C++ 11中调用T(const T&)或T(T &&)?

所以,代码第一:

#include <iostream>
#include <utility>

struct X{
    int i;
    void transform(){}
    X() :i(0){std::cout<<"default\n";}
    X(const X& src): i(src.i){std::cout<<"copy\n";}
    X(X&& msrc) :i(msrc.i){msrc.i=0;std::cout<<"move\n";}
};

X getTransform(const X& src){
    X tx(src);
    tx.transform();
    return tx;
}

int main(){

    X x1;// default
    X x2(x1); // copy
    X x3{std::move(X{})}; // default then move
    X x41(getTransform(x2)); // copy in function ,then what?
    X x42(std::move(getTransform(x2))); // copy in funciton, then move
    X x51( (X()) );//default, then move? or copy?
      // extra() for the most vexing problem
    X x52(std::move(X())); //default …
Run Code Online (Sandbox Code Playgroud)

c++ temporary-objects move-constructor c++11

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

与Unix相比,使用unicode替换的Rs中的gsub在Windows下会产生不同的结果吗?

在Mac或Linux下的R中运行以下命令会产生预期结果,即希腊字母beta:

gsub("<U\\+[0-9A-F]{4}>", "\u03B2", "<U+03B2>")

"\u03B2"
Run Code Online (Sandbox Code Playgroud)

但是,在Windows下运行第一个命令会产生错误的结果,但第二个命令会提供正确的beta输出.我在Windows上尝试了3个版本的R(3.0.2,3.1.1和3.1.2).他们都一直打印出"错误"的结果.(由于我现在无法访问Windows,因此无法发布输出.)

另外,是否可以使用gsub将格式<U + FFFF>(忽略空间,如果没有它,网站不显示任何内容)转换为"\ uFFFF"?

非常感谢你.

UPDATE:

窃取了MrFlick的解决方案,如果一个句子中有多个Unicodes,我就会破解以下丑陋的解决方案.但是,修复非常难看,所以请随意发布改进.

test.string <- "This is a <U+03B1> <U+03B2> <U+03B2> <U+03B3> test <U+03B4> string."

trueunicode.hack <- function(string){
    m <- gregexpr("<U\\+[0-9A-F]{4}>", string)
    if(-1==m[[1]][1])
        return(string)

    codes <- unlist(regmatches(string, m))
    replacements <- codes
    N <- length(codes)
    for(i in 1:N){
        replacements[i] <- intToUtf8(strtoi(paste0("0x", substring(codes[i], 4, 7))))
    }

    # if the string doesn't start with a unicode, the copy its initial part
    # until first occurrence of unicode
    if(1!=m[[1]][1]){
        y <- substring(string, 1, …
Run Code Online (Sandbox Code Playgroud)

unicode r

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