小编Mat*_* M.的帖子

认识短文的语言?

我有一个文章列表,每篇文章都有自己的标题和描述.不幸的是,从我使用的来源,没有办法知道他们写的是什么语言.

此外,该文本并非完全用一种语言书写; 几乎总是英语单词存在.

我估计我需要存储在我的机器上的字典数据库,但感觉有点不切实际.你有什么建议我这样做?

python nlp

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

一元和算子有什么特殊规则?

是否有适用于一元和运营商的特殊规则?

例如,代码:

#include <iostream>
struct X
{
    X() {}
    void* operator &() { return NULL; }
};
int main()
{
    const X x;
    std::cout << &x << std::endl;
    X y;
    std::cout << &y;
}
Run Code Online (Sandbox Code Playgroud)

产生输出

0xbfbccb33
0
Run Code Online (Sandbox Code Playgroud)

我知道这会像这样编译和运行,因为之前我曾在这里进行过讨论,但我不知道这一点,我原本预计这会无法编译,因为operator &没有声明const.

因此,operator &() const无论是否operator &()过载,编译器似乎都会生成.很好,这很有意义,尤其是样本和输出.

问题是标准中详细说明了这种行为在哪里?

我不是在寻找重复我在问题中已经说明的答案的答案,所以请不要解释我的重载操作符是如何在一个const对象上调用的,因为我已经知道了.

c++ operator-overloading

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

C++指向函数的指针,初学者问题

我想问一下C++中的指针

我有一些简单的代码:

int add(int a, int b){
 return a+b;
}

int runner(int x,int y, int (*functocall)(int, int)){
 return (*functocall)(x,y);
}
Run Code Online (Sandbox Code Playgroud)

现在,假设我使用这种方式调用这些函数:

cout<<runner(2,5,&add);
Run Code Online (Sandbox Code Playgroud)

或者可能

cout<<runner(2,5,add);
Run Code Online (Sandbox Code Playgroud)

有什么不同吗?因为当我尝试时,结果是相同的,没有错误.

非常感谢

c++ pointers function

19
推荐指数
2
解决办法
361
查看次数

std :: ostringstream打印c-string的地址而不是其内容

我偶然发现了一个我最初无法解释的奇怪行为(见ideone):

#include <iostream>
#include <sstream>
#include <string>

int main() {
  std::cout << "Reference     : "
            << (void const*)"some data"
            << "\n";

  std::ostringstream s;
  s << "some data";
  std::cout << "Regular Syntax: " << s.str() << "\n";

  std::ostringstream s2;
  std::cout << "Semi inline   : "
            << static_cast<std::ostringstream&>(s2 << "some data").str()
            << "\n";

  std::cout << "Inline        : "
            << dynamic_cast<std::ostringstream&>(
                 std::ostringstream() << "some data"
               ).str()
            << "\n";
}
Run Code Online (Sandbox Code Playgroud)

给出输出:

Reference     : 0x804a03d
Regular Syntax: some data
Semi inline   : some …
Run Code Online (Sandbox Code Playgroud)

c++ stream

19
推荐指数
2
解决办法
6599
查看次数

我可以在覆盖虚函数的返回类型中丢失"constness"吗?

以下代码编译并运行,并且gcc或clang不会发出警告:

#include <iostream>

struct Base {
    virtual ~Base() = default;
    virtual std::string const& get() = 0;
};

struct Derived: Base {
    virtual std::string& get() override { return m; }
    std::string m;
};

int main()
{
    Derived d;
    d.get() = "Hello, World";

    Base& b = d;
    std::cout << b.get() << "\n";
}
Run Code Online (Sandbox Code Playgroud)

std::string&协变带std::string const&呢?

c++

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

直接访问成员或始终使用getter

注意:C++特定问题

当一个类使用getter访问自己的成员数据时,我个人觉得它很奇怪/丑陋.我知道性能影响是没有但我只是不喜欢看到所有这些方法调用.是否有任何强有力的论据,或者它只是个人喜好的东西之一,应留给每个编码人员,还是在编码标准中任意控制?

更新:我的意思是简单的吸气剂,特别是对于一个班级的非公共成员.

c++ coding-style

18
推荐指数
4
解决办法
4836
查看次数

切片包含Unicode字符的字符串

我有一段文字,字符长度不同.

let text = "Hello ??????";
Run Code Online (Sandbox Code Playgroud)

给定开始(包含)和结束(排除)字符索引时,我需要获取一小段字符串.我试过这个

let slice = &text[start..end];
Run Code Online (Sandbox Code Playgroud)

并得到以下错误

thread 'main' panicked at 'byte index 7 is not a char boundary; it is inside '?' (bytes 6..8) of `Hello ??????`'
Run Code Online (Sandbox Code Playgroud)

我想这是因为西里尔字母是多字节的,并且[..]符号使用字节索引来表示字符.如果我想使用字符索引切片,我可以使用什么,就像我在Python中做的那样:

slice = text[start:end]

我知道我可以使用chars()迭代器并手动遍历所需的子字符串,但是有更简洁的方法吗?

string unicode slice rust

18
推荐指数
2
解决办法
1539
查看次数

c ++ linux双重破坏静态变量.链接符号重叠

环境:linux x64,编译器gcc 4.x

项目有以下结构:

static library "slib"
-- inside this library, there is static object "sobj"

dynamic library "dlib"
-- links statically "slib"

executable "exe":
-- links "slib" statically
-- links "dlib" dynamically
Run Code Online (Sandbox Code Playgroud)

在节目结束时,"sobj"被毁坏两次.这种行为是预期的,但是它在相同的内存地址被破坏了两次,即在析构函数中也是"this" - 因此存在双重破坏问题.我认为这是由于一些符号重叠.

这场冲突的解决方案是什么?也许一些链接选项?


这是测试用例:


main_exe.cpp

#include <cstdlib>

#include "static_lib.h"
#include "dynamic_lib.h"

int main(int argc, char *argv[])
{
    stat_useStatic();
    din_useStatic();
    return EXIT_SUCCESS;
}
Run Code Online (Sandbox Code Playgroud)

static_lib.h

#ifndef STATIC_LIB_H
#define STATIC_LIB_H

#include <cstdio>

void stat_useStatic();
struct CTest
{
    CTest(): status(isAlive)
    {
        printf("CTest() this=%d\n",this);
    }
    ~CTest()
    {
        printf("~CTest() this=%d, %s\n",this,status==isAlive?"is Alive":"is …
Run Code Online (Sandbox Code Playgroud)

c++ linux dynamic-linking static-linking

17
推荐指数
2
解决办法
3538
查看次数

在变量定义之前转到 - 它的值会发生什么?

这是我想知道的一些问题.鉴于以下代码,我们可以确定其输出吗?

void f() {
  int i = 0; 
  z: if(i == 1) goto x; else goto u; 
  int a; 
  x: if(a == 10) goto y; 
  u: a = 10; i = 1; goto z; 
  y: std::cout << "finished: " << a; 
}
Run Code Online (Sandbox Code Playgroud)

这是否保证finished: 10根据C++标准输出?或者编译器可以占用a存储到的寄存器,何时goto到达之前的位置a

c++ goto local-variables register-allocation

17
推荐指数
3
解决办法
1611
查看次数

什么时候被临时毁坏?

到目前为止,我认为在产生它的声明的评估结束时,临时性被破坏了.

但是,当使用临时初始化a的字段时,似乎存在异常struct.

PeterHall帮助提供了一个简单的代码示例,说明评论与他的答案的区别,我简化了一点:

struct Wrapper<'a> {
    cmd: &'a Cmd<'a>,
}

struct Cmd<'a> {
    args: &'a Option<String>,
}

impl <'a> Cmd<'a> {
    fn new(args: &'a Option<String>) -> Cmd<'a> {
        Cmd {
            args: args,
        }
    }
}

pub fn main() {
    // OK
    let cmd = Cmd {
        args: &None,
    };

    // OK
    let cmd = Wrapper {
        cmd: &Cmd {
            args: &None,
        }
    };

    // Lifetime error
    let cmd = Some(Cmd { …
Run Code Online (Sandbox Code Playgroud)

rust

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