小编Seb*_*ann的帖子

C++:引用"超出范围"对象

有一件事我从未理解过参考文献,我希望有人可以帮助我.据我所知,引用不能为空.但是如果你有一个函数foo()返回对堆栈对象的引用会发生什么:

Object & foo(){
    Object o;
    return o;
}

Object & ref = foo();
Run Code Online (Sandbox Code Playgroud)

理论引用将引用一个不存在的对象,因为一旦函数返回,o就会超出范围.这里发生了什么事?

c++ reference

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

Shutdown Hook c ++

有什么方法可以在终止时运行代码,无论什么样的终止(异常,正常,未捕获的异常等)?我知道它实际上可以用Java,但它甚至可以在C++中使用吗?我假设一个Windows环境.

c++ hook shutdown termination exit

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

底层集合的抽象迭代器

基本上我想做的是让一个纯虚方法将迭代器返回到具体类型的任意集合,例如伪代码:

virtual Iterator<T> getIterator() const = 0;
Run Code Online (Sandbox Code Playgroud)

该类的用户实际上并不关心子类使用的实现.它可以是一个集合,向量,列表,数组等.

我知道这个std::iterator类,但我无法找到一种方法来正确指定它以便使用一个简单的向量.

virtual std::iterator<std::random_access_iterator_tag,T> getIterator() const = 0;

myVector.begin() // compilation error in implementation
Run Code Online (Sandbox Code Playgroud)

std::iteratorconst Tas作为类型参数定义也没有用.我也尝试离开T,而是将指针和引用类型定义为const T*const T&.

通过查看std::vector实现,我发现std::vector::const_iterator实际上源于_Iterator012派生_Iterator_base.

真的让我感到困惑的是,在std中没有任何方法可以处理任意集合.<algorithm>由于两个原因,将我的类作为模板实现,对我来说不是一个选择:

  • 无法控制实际值类型
  • 我根本不想让我的类模板使我的设计复杂化并使事情变得不那么灵活.

使用的类型参数T仅用于演示,实际上这是一种具体类型.

c++ c++-standard-library

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

ASM:添加0xFFFFFFFF

我正在逆转反汇编,偶然发现了一条我不理解的指令链:给定的是一个对象指针esi.

.text:00C20263                 cmp     dword ptr [esi+80h], 0
.text:00C2026A                 jnz     short loc_C2027D
Run Code Online (Sandbox Code Playgroud)

如您所见,成员+0x80不是0(成员是整数),代码跳转到00C2027D:

.text:00C2027D                 add     dword ptr [esi+80h], 0FFFFFFFFh
.text:00C20284                 jnz     short loc_C20291
Run Code Online (Sandbox Code Playgroud)

这两条指令是我真正理解的.首先,成员增加0xFFFFFFFF; 但由于该成员不为0,否则该指令是否会超过32位整数的最大值?jnz指令什么时候跳?

有人可能会指出这两条指令的目的是什么?

x86 assembly

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

SQLAlchemy:单表继承,子项中的相同列

我目前使用单表继承策略映射类层次结构(我不可能使用join).此层次结构可能如下所示:

class Parent(Base):
    __tablename__ = 'mytable'
    __mapper_args__ = {
        'polymorphic_on' : type,
        'polymorphic_identity' : 'parent'
    }

    id = Column(Integer, primary_key = True)
    type = Column(String(32), nullable = False)

class Child1(Parent):
    __mapper_args__ = { 'polymorphic_identity' : 'child1' }

    property1 = Column(Integer)

class Child2(Parent):
    __mapper_args__ = { 'polymorphic_identity' : 'child2' }

    property1 = Column(Integer)

class Child3(Parent):
    __mapper_args__ = { 'polymorphic_identity' : 'child3' }

    other_property = Column(Integer)
Run Code Online (Sandbox Code Playgroud)

那么问题是我希望property1两者都有Child1,Child2但不是Child3.上面的当前代码导致错误:

sqlalchemy.exc.ArgumentError: Column 'property1' on class <class
'__main__.Child2'> …
Run Code Online (Sandbox Code Playgroud)

python orm sqlalchemy single-table-inheritance

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

通过char Java获取枚举

enum用Java 很简单

public enum FileType {

    FILE('-'), DIRECTORY('d'), SYMLINK('l'), DEVICE('b');

    private char type;

    FileType(char type) {
        this.type = type;
    }

}
Run Code Online (Sandbox Code Playgroud)

我想创建一种方式FileType type = FileType.valueOf('d');,是否有可能?

java enums

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

C++:比较字符串词典

使用覆盖bool operator<(const std::string & rhs)运算符时字符串是否与字典相比较?例如:

std::string str1 = "aabbcc"
std::string str2 = "bbaacc"

(str1 < str2) == std::lexicographical_compare(str1.begin(),str1.end(),str2.begin(),str2.end()) // is this statement true?
Run Code Online (Sandbox Code Playgroud)

c++ string comparison lexicographic

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

替换文件中的所有正则表达式匹配项

考虑一个基本的正则表达式,如a(.+?)a. 如何用第一组的内容替换文件中该正则表达式的所有出现?

python regex

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

Java:时间分辨率

在java se/java中是否有任何内置类表示任意"时间分辨率"; 例如每小时,每秒,所有10分钟等?

java time

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

在EL中访问无状态会话bean的简便方法?

EL中是否有可能调用无状态会话bean的方法而不包含在辅助bean中?将方法调用包装在一个支持bean中会产生冗余代码并使得执行BU变得麻烦,因为必须包装每个方法.

java jsf ejb el

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

Python:从实例中删除成员

我在运行时使用该属性将可调用对象添加到 A 类的实例中__dict__。但有时我想从我的实例中删除所有添加的对象。我考虑过将初始__dict__属性存储在成员中_orgDict然后self.__dict__ = self._orgDict稍后执行。我想知道是否:

  • 这到底有用吗?
  • 删除的对象确实被删除了还是只是不再包含在我的实例中?

python reflection

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

std :: string没有null-character

std::string最终没有空字符是否有效,可以像这样获取吗?:

std::string str = "Hello World";
str.resize(str.size() - 1);
Run Code Online (Sandbox Code Playgroud)

对于那些好奇的人:

我有一个第三方函数接受一个字符串并迭代字符(使用迭代器).不幸的是,该函数是错误的(因为它是一个开发版本)并且不能处理空字符.我没有其他签名可供选择,我无法修改功能(正如我所说,第三方,我们不想分叉),同时我不想重新发明轮子.据我所知,该函数应该在没有null字符的情况下按预期工作,所以我想至少尝试一下.

迭代发生如下:

bool nextChar(CharIntType& c)
{
    if (_it == _end) return false;
    c = *_it;
    ++_it;
    return true;
}
Run Code Online (Sandbox Code Playgroud)

其中,_it被初始化为std::string::begin()_endstd::string::end()

c++ string

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

C++:将对象转换为数组

我正在写一个矩阵类,我希望能够将固定大小的矩阵转换为固定大小的双数组.虽然,我在实施适当的演员操作时遇到了麻烦.到目前为止我实施的内容不起作用:

template<unsigned int M, unsigned int N>
class Matrix
{
    typedef double (&ArrayType)[M][N];
public:
     operator ArrayType();
}


Matrix<3,3> mat1;
double matArr[3][3];
matArr =  mat1;
Run Code Online (Sandbox Code Playgroud)

错误:'sfz :: Matrix <3u,3u>'到'double [3] [3]'的赋值不兼容

明确地转换矩阵会导致另一个错误:

错误:ISO C++禁止转换为数组类型'double [3] [3]'

有没有办法实现我想要实现的语法?

c++ arrays casting operator-overloading

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