小编Pra*_*tic的帖子

C++中用户定义类型的顺序类型转换

此代码编译并运行公共隐式bool强制转换(在下面注释,在http://ideone.com/FDJHB)或通过公共隐式int强制转换,后跟隐式int到bool强制转换(如下所示,http: //ideone.com/kHQ46).但是,将bool强制转换为私有(在http://ideone.com/4poze下面注释掉)会导致编译错误.在这种情况下,为什么通过int的路由不再是一个选项?像这样的连续演员是否定义了行为?谢谢.

http://ideone.com/kHQ46

#include <iostream>

class MyObject {
 public:
  MyObject(int theInt) : theInt_(theInt) {
    return;
  }

  MyObject& operator=(MyObject& source) {
    std::cout << "assign op" << std::endl;
    theInt_ = source.theInt_;
    return *this;
  }

  friend MyObject operator*(MyObject& lhs, MyObject& rhs);

  operator int() {
    std::cout << "int conv" << std::endl;
    return theInt_;
  }

/*
  operator bool() {
    std::cout << "bool conv" << std::endl;
    return theInt_;
  }
*/

 private:

  int theInt_;

  MyObject(MyObject& source);
//  operator bool();

};

MyObject …
Run Code Online (Sandbox Code Playgroud)

c++ casting

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

使用多重继承来满足抽象基类

为什么这不起作用?继承的函数签名是否巧妙地不正确,或者是在继承成员函数之前强制执行的抽象基类还是其他东西?这可以说服没有函数包装器吗?

#include <iostream>

struct AbsBase {
    virtual void foo() = 0;
    virtual void bar() = 0;
};

struct ProvideFoo {
    void foo() { std::cout << "foo\n"; }
};

struct ProvideBar {
    void bar() { std::cout << "bar\n"; }
};

struct Concrete : public ProvideFoo, public ProvideBar, public AbsBase {
    // I guess I could put function wrappers here... sigh...
    //void bar() {ProvideBar::bar();}
    //void foo() {ProvideFoo::foo();}
};

int main() {
    Concrete c;
    c.foo();
    c.bar();
}
Run Code Online (Sandbox Code Playgroud)

c++ abstract-class multiple-inheritance mixins

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

C和C++标准库函数如何查找文件的结尾?

怎么做fseek(myFILEptr, 0, SEEK_END)myifstream.seekg(0, std::ios::end)工作?

他们是否必须检查每个角色,并且他们的时间复杂度与文件的大小成线性关系?它比那更聪明吗?典型的文件系统提供哪些信息来处理?

哪些部分是由语言标准解决的,哪些不是?对于那些没有标准的部件,是否有事实上的标准?

我在这里将C和C++组合在一起,因为我希望每个人的答案几乎相同,甚至C++函数可以并且可能经常根据C函数实现.那是对的吗?

c c++ filesystems file-io c++-standard-library

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

确定fork之后的内存是否为copy-on-write

我想编写一个小程序来演示操作系统在调用后是否使用copy-on-write fork().问题在于写入时复制对受影响的进程大多是透明的.

对于给定变量,使用&运算符访问的虚拟内存地址对于分叉进程看起来是相同的,即使这些进程在该变量中存储不同的值也是如此.有没有办法确定单独进程中的变量是否存储在同一物理地址?有没有办法确定它们是不是?

c unix fork memory-management

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

C++ 03中的函数返回类型推导

标签会提出问题,但考虑以下因素:

template<typename F, typename A, typename R>
R call(F function, A arg) {
    return function(arg);
}

int foo(char) {
    return 5;
}

int main() {
    call(foo, 'a');
}
Run Code Online (Sandbox Code Playgroud)

如果删除参数R并且手动插入int作为返回类型,编译器会愉快地编译它.如图所示,编译器无法知道如何制作R.

如何在C++ 03中推断出函数返回类型?

我正在寻找不需要手动指定返回类型的方法,也不需要对其他参数进行侵入式更改.如果这是不可能的,那么我只是在寻找一个权威声明来验证这一点.

c++ templates return-type c++03 type-deduction

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

什么时候返回rvalue引用导致未定义的行为?

这里的Stack Overflow答案中,Kerrek发布了以下代码.

Foo && g()
{
    Foo y;
    // return y;         // error: cannot bind ‘Foo’ lvalue to ‘Foo&&’
    return std::move(y); // OK type-wise (but undefined behaviour, thanks @GMNG)
}
Run Code Online (Sandbox Code Playgroud)

GManNickG指出这会导致未定义的行为.

克雷克补充道

真正; 除了前进和移动,你不会真正从任何东西返回&&.这是一个人为的例子.

令我困惑的是,C++ 11标准使用函数调用,该函数调用返回rvalue引用作为xvalue表达式的示例.

xvalue("eXpiring"值)也指对象,通常接近其生命周期的末尾(例如,可以移动其资源).xvalue是涉及rvalue引用的某些表达式的结果(8.3.2).[示例:调用返回类型为右值引用的函数的结果是xvalue. - 末端的例子]

那么,当确实在未定义的行为中返回rvalue引用结果时?是否总是导致未定义的行为,除了std::movestd::forward和标准只是简洁?或者您是否必须访问未定义行为的返回值才能生成结果?

*"何时"是指"在什么情况下".我意识到这里没有有意义的时间概念.

c++ undefined-behavior rvalue-reference c++11

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

使用Pentadactyl提示StackExchange投票按钮

如何让Pentadactyl(Vimperator的一个分支)在StackExchange上提示投票箭头?

例如,我想提出这个问题和答案,但是即使我删除了我的.pentadactylrc文件并重新启动了Firefox,Pentadactyl也没有提供投票箭头按钮的提示.

有没有办法在Vim中查看当前映射的键?

我想我没有暗示任何问题,但我不是百分百肯定.我从来没有在StackOverflow上遇到Vimperator的问题,我希望Pentadactyl应该拥有Vimperator所做的大部分功能.

我怀疑hinttags' 'ht'本页描述Pentadactyl设置的设置描述是解决这个问题的关键.

http://5digits.org/help/pentadactyl/options.xhtml

不幸的是,我不知道我自己的肘部的CSS选择器或XPath表达式.这是解决方案,如果是这样,哪个CSS选择器描述了一个SO投票按钮?如果没有,解决方案是什么?

javascript css firefox vimperator

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

Unix和Linux API头是否与C++兼容?

我以前编写的C++代码是#includeUnix和Linux API头文件,这些程序产生了预期的行为.也就是说,我不知道这是否可以依赖.当C++程序使用时,C和C++之间的不兼容性可能会导致有效的C标头以意外的方式运行.

Unix和Linux API头文件是否可以被编译为C++的代码可靠地使用?

这是这些标题的作者的目标吗?或者这些标题只是有效的C?

这样做有什么已知的陷阱吗?

显然Unix和Linux发行版很多,我不希望得到一个答案来逐一解决每个发行版.我的期望是,相同的答案将适用于几乎所有的Unix和Linux发行版,异常将证明这一规则.如果这个假设是错误的,那么对它的解释也是一个有效的答案.

通过Unix标头我的意思是:

http://www.unix.org/version3/apis/headers.html

Linux头文件我的意思是Linux发行版提供的头文件通常是一个名为"linux-headers"的包,它允许程序与Linux内核交互.例如,这个Debian包:

https://packages.debian.org/wheezy/kernel/linux-headers-3.2.0-4-amd64

我意识到Unix链接只是一个规范,并且每个Linux发行版都不同但我再次怀疑对大多数发行版提出这个问题是合理的.如果那不是真的那么纠正我.

编辑我只是指用户空间程序使用的标题.

c++ unix linux

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

在C标准库中转发声明实体?

转发C标准库提供的结构和函数是否合法?

我的背景是C++,答案是否定的.这样做的主要原因是C++标准库强制要求的结构或类可以是幕后模板,并且可能具有"秘密"模板参数,因此无法使用天真的非模板声明正确声明.即使用户确实弄清楚如何在特定实现的特定版本中转发声明特定实体,实现也没有义务在未来版本中不破坏该声明.

我手头没有任何C标准的副本,但显然C中没有模板.

那么在C标准库中转发声明实体是否合法?

C++标准库中的实体可能无法向前声明的另一个原因是实现提供的头文件不需要遵循常规规则.例如,在最近的一个问题中,我询问实现提供的C++头是否需要是一个实际文件而答案是否定的.我不知道是否有任何适用于C.

C和C++都使用C标准库,但对于这个问题,我只问C.

c forward-declaration language-lawyer

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

如果密钥已经存在而没有散列两次,则插入字典或失败

有没有办法将新密钥插入dict或失败如果该密钥已经存在而没有散列两次?

从这样的事情:

class MyClass:
    def __init__(self):
        pass

    def __hash__(self):
        print('MyClass.__hash__ called')
        return object.__hash__(self)

my_key = MyClass()
my_value = "my_string"
my_dict = {}
if my_key not in my_dict:
    my_dict[my_key] = my_value
else:
    raise ValueError
Run Code Online (Sandbox Code Playgroud)

你可以看到它__hash__被调用了两次,并且这段代码没有表达作为原子操作的插入或失败的所需行为.

python dictionary python-3.x

3
推荐指数
2
解决办法
96
查看次数