小编tej*_*jas的帖子

new和:: new有什么区别

许多图书馆喜欢使用::new和使用::delete.

例子来自 boost::make_shared

template< class T, class... Args > typename boost::detail::sp_if_not_array< T >::type make_shared( Args && ... args )
{
    boost::shared_ptr< T > pt( static_cast< T* >( 0 ), BOOST_SP_MSD( T ) );

    boost::detail::sp_ms_deleter< T > * pd = static_cast<boost::detail::sp_ms_deleter< T > *>( pt._internal_get_untyped_deleter() );

    void * pv = pd->address();

    ::new( pv ) T( boost::detail::sp_forward<Args>( args )... );
    pd->set_initialized();

    T * pt2 = static_cast< T* >( pv );

    boost::detail::sp_enable_shared_from_this( &pt, pt2, pt2 );
    return boost::shared_ptr< T …
Run Code Online (Sandbox Code Playgroud)

c++

29
推荐指数
3
解决办法
3366
查看次数

如何在Perl6语法中匹配十六进制数组

我有一个类似的字符串"39 3A 3B 9:;",我想提取“ 39、3A,3B”

我试过了

my $a = "39 3A 3B  9:;";
grammar Hex {
    token TOP { <hex_array>+ .* }
    token hex_array { <[0..9 A..F]> " " }
};
Hex.parse($a);
Run Code Online (Sandbox Code Playgroud)

但这似乎不起作用。甚至这似乎也不起作用。

my $a = "39 3A 3B ";
grammar Hex {
    token TOP { <hex_array>+ }
    token hex_array { <[0..9 A..F]> " " }
};
Hex.parse($a);
Run Code Online (Sandbox Code Playgroud)

我确实尝试过语法:: Tracer TOP和hex_array均失败

TOP
|  hex_array
|  * FAIL
* FAIL
Run Code Online (Sandbox Code Playgroud)

regex grammar perl6

12
推荐指数
2
解决办法
148
查看次数

静态库中的Singleton类

假设我在静态库中有一个单例类S,这可以与其他动态库D1 D2 D3链接,

所以根据我的理解,类S将在每个D1,D2和D3中有一个单独的实例,即使它不是单例(如全局)也是如此

有没有办法防止S类的多个副本?我不能将单例S放在另一个动态库中.

                 Executable
                /   |   \   \
              D1    D2  D3  D4 
               |    |   |
               S    S   S
Run Code Online (Sandbox Code Playgroud)

编辑:单例S在一个单独的静态库中,分别与D1 D2 D3 ...链接.
单例在堆中分配,只有指针是静态的

static s::instance()
{
    static smart_ptr<S> ptr = NULL;
    if(ptr == NULL) ptr = new S;
    return ptr;
}
Run Code Online (Sandbox Code Playgroud)

EDIT2:

我做了一个简单的测试用例来检查出来这是一个示例makefile(用.so替换.d)我做了检查,我在Ubuntu和Cygwin上检查过,两个g ++编译器和行为都不同.cygwin创建了2个不同的对象但是ubuntu创建了1个对象

all: dynamic1 dynamic2 main

static: static.cpp 
    g++ -c -fPIC static.cpp -o obj/static.o
    ar rvs lib/static.a obj/static.o 

dynamic1: static dynamic1.cpp
    g++ -fPIC -shared dynamic1.cpp lib/static.a -o lib/libdynamic1.dll

dynamic2: static dynamic2.cpp
    g++ -fPIC -shared dynamic2.cpp lib/static.a …
Run Code Online (Sandbox Code Playgroud)

c++ singleton design-patterns static-libraries dynamic-library

7
推荐指数
1
解决办法
2309
查看次数

这是模板的正确行为吗?

template<class blah, class bleh>
blah func(bleh p)
{
    // Do something
}

int main()
{
    double d=1.111;
    int i = func<int>(d); // #1
    int j = func<int,double>(d); // #2
    // ....
}
Run Code Online (Sandbox Code Playgroud)

在这个例子中func,#1和#2 的实例都在编译,但我不确定什么是正确的,以及为什么.

有人可以解释为什么#1是正确的,也许给一些背景?

c++ templates

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

如何使子子程序参数成为readwrite

假设我有一个交换两个给定参数的子程序.它在逻辑上需要具有读写参数.

sub swap($l, $r)
{
   my $tmp = $l;
   $l=$r;
   $r=$tmp;
}
Run Code Online (Sandbox Code Playgroud)

我收到错误:

无法分配给只读变量($ l)或值

我认为我不能\$param在perl5中尝试.

我想我应该尝试一下,:=但文档中没有提到任何有关函数参数的内容.

如何将参数作为对此子例程的引用传递,以便我可以更改其值?

perl6

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

`inline constexpr bool` 和 `concept` 之间有什么区别吗?

template<typename T>
inline constexpr bool is_int_v1 = std::is_same_v<T, int>;

template<typename T>
concept is_int_v2 = std::is_same_v<T, int>;
Run Code Online (Sandbox Code Playgroud)

inline constexpr bool在这个代码块中,格式和格式有什么区别concept。其中一个优于另一个还是它们等效?

c++ c++-concepts c++20

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

具有自签名证书链的无效CA证书

我有一个带有这些命令的自签名证书链,并在Apache服务器上对其进行了配置

但是当我尝试 openssl s_client -showcerts -servername server -connect my-host.local:443 -CAfile all.crt

我从openssl收到错误 Verify return code: 24 (invalid CA certificate)

用于生成证书的命令或配置文件是否有问题?

用于创建证书链的命令

# self signed root cert
openssl genrsa -aes256 -out ca.key 4096
openssl req -new -x509 -days 3000 -key ca.key -out ca.crt -config ca.conf

# intermediate cert signed with the root cert
openssl genrsa -aes256 -out int.key 4096
openssl req -new -key int.key -out int.csr -config int.conf
openssl x509 -req -days 3000 -in int.csr -CA ca.crt -CAkey ca.key -set_serial 01 …
Run Code Online (Sandbox Code Playgroud)

apache ssl openssl self-signed ssl-certificate

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

缩进感知原始字符串文字

有没有办法让原始字符串文字知道缩进?

例如

{
    std::string_view str(
    R"(
       Hello
           World
    )");
    std::cout << "ref\n" << str;
}
Run Code Online (Sandbox Code Playgroud)

印刷

ref

       Hello
           World
    
Run Code Online (Sandbox Code Playgroud)

但我想要

ref
Hello
    World
Run Code Online (Sandbox Code Playgroud)

我看到这个答案解决了这个问题,但这是运行时。我认为使用 c23#embed可以解决这个问题。

但是有没有办法在编译时做到这一点,最好使用c++17,c++20也可以。

c++ string-literals c++17 c++20

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

dynamic_cast的行为上升了另一个链

我只是在这里阅读这个问题 /sf/answers/23246051/ 它告诉动态演员

你可以使用它而不仅仅是向下投射 - 你可以侧身或甚至向上投射另一个链.dynamic_cast将寻找所需的对象并在可能的情况下返回它.

那么这究竟意味着什么呢?这种情况发生的限制/条件是什么?

我认为这就是声明的含义.演员阵容发生了,我也得到了一个明显的分段错误.

#include <iostream>
class base
{
public:
    virtual void print () = 0;
};

class childa : public base
{
public:
    char c1;
    virtual void print ()
    {
        std::cout << "childa\n";
    }
    void printout()
    {
        std::cout << "childa out\n";
    }
};

class childb : public base
{
public:
    int c2;
    virtual void print ()
    {
        std::cout << "childb\n";
    }
    void printin()
    {
        std::cout << "childb in\n";
    }
    void printout()
    {
        std::cout << "childb …
Run Code Online (Sandbox Code Playgroud)

c++

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

什么是静态的操作员新意味着什么

什么静态的运营商新意味着什么?如果我把它放在头文件中会发生什么?

static void* operator new(size_t size, std::string s)
{
    return 0;
}

int main() 
{
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

此代码在visual studio 2013上编译

但是gcc给出了一个错误

错误:'void*operator new(size_t)'可能不会声明为静态

static void*operator new(size_t size)

铿锵声

错误:'operator new'的静态声明遵循非静态声明

static void*operator new(size_t size)

这是c ++中的灰色区域,还是视觉工作室慷慨?

链接到代码:https://www.ideone.com/kZmWgf

c++

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

查找在perl DBI中执行的查询类型

在我的perl程序中,我有一个函数,它将查询作为输入并执行它,并打印在查询是select语句时获取的所有行.

但问题是更新或插入语句,其中fetchrow_array给出一个错误,所以有什么方法我可以知道执行了什么类型的查询,以便我可以跳过获取部分?

perl dbi

0
推荐指数
1
解决办法
75
查看次数