小编ice*_*ime的帖子

显式复制构造函数行为和实际用途

最近的一个问题让我想知道显式复制构造函数.这是我在Visual Studio 2005下尝试编译的示例代码:

struct A
{
    A() {}
    explicit A(const A &) {}
};

// #1 > Compilation error (expected behavior)
A retByValue()
{
    return A();
}

// #2 > Compiles just fine, but why ?
void passByValue(A a)
{
}

int main()
{
    A a;
    A b(a); // #3 > explicit copy construction : OK (expected behavior)
    A c = a; // #4 > implicit copy construction : KO (expected behavior)

    // Added after multiple comments : not an …
Run Code Online (Sandbox Code Playgroud)

c++

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

C中的回车?

以下程序的输出是: hai

我没有得到\r这个程序中的回车如何工作,真的可以帮助我吗?

#include <stdio.h>
#include<conio.h>

void main()
{
    printf("\nab");
    printf("\bsi");
    printf("\rha");
    _getch();
}
Run Code Online (Sandbox Code Playgroud)

c

28
推荐指数
3
解决办法
10万
查看次数

为什么getArgs和getProgName IO操作?

我是一个完整的新手,目前正试图通过"让你学习哈斯克尔为大好 " 来学习Haskell .我已经到达了解释如何使用命令行参数的部分,而且有些事情让我烦恼.

根据我的理解(和haskell.org的定义),动作是为了封装副作用.命令行参数是程序的给定实例的不可变输入,那么有什么意义getProgName :: IO String而不是getProgName :: String?不同之处:阻止纯函数调用的重点是getProgName什么?

更新

到目前为止,我对这个问题有了很好的答案.我接受Don Stewart是最简单和最简洁的,但Conal(及其相关的博客文章)绝对值得一读.

io haskell referential-transparency command-line-arguments

21
推荐指数
2
解决办法
1265
查看次数

解压缩bz2文件

我想解压缩不同路径中不同目录中的文件.代码如下,错误是无效的数据流.请帮帮我.非常感谢.

import sys
import os
import bz2
from bz2 import decompress

path = "Dir"
for(dirpath,dirnames,files)in os.walk(path):
   for file in files:
       filepath = os.path.join(dirpath,filename)
       newfile = bz2.decompress(file)
       newfilepath = os.path.join(dirpath,newfile)
Run Code Online (Sandbox Code Playgroud)

python compression

20
推荐指数
2
解决办法
2万
查看次数

列表中的修改

我是Python的新手但我明白事情不应该这样做,所以请考虑以下代码片段纯粹教育:-)

我目前正在阅读"学习Python"并尝试完全理解以下示例:

>>> L = [1, 2, 3, 4, 5]
>>> for x in L:
...    x += 1
...
>>> L
[1, 2, 3, 4, 5]
Run Code Online (Sandbox Code Playgroud)

我不明白这种行为是否与数值类型的不变性有些相关,所以我运行了以下测试:

>>> L = [[1], [2], [3], [4], [5]]
>>> for x in L:
...    x += ['_']
...
>>> L
[[1, '_'], [2, '_'], [3, '_'], [4, '_'], [5, '_']]
Run Code Online (Sandbox Code Playgroud)

问题:是什么使列表在第一个代码中保持不变并在第二个代码中更改?

我的直觉是语法有误导性,并且:

  • x += 1一个整数真的意味着x = x + 1(因此分配一个新的引用)
  • x += ['_']列表真的意味着x.extend('_')(因此更改列表)

python

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

C++ size_t或ptrdiff_t

如果您有以下代码,其中p是指针:

p = p + strlen(p) + size_t(1);
Run Code Online (Sandbox Code Playgroud)

既然strlen()size_t都是size_t,我应该把代码转换成ptrdiff_t

p = p + (ptrdiff_t)(strlen(p) + size_t(1));
Run Code Online (Sandbox Code Playgroud)

如果是这样的话?

谢谢,格雷格

c++

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

boost序列化异常:未注册的类,序列化多态基本问题

我一直在阅读,交叉引用,最终没有找到一个连贯的例子和答案.我想做的事情很简单,但我显然错过了一些东西.在英语中,我有一个带有两个抽象基础的类结构(纯BB来自纯AA),我管理的是:

std::vector<AA*>
Run Code Online (Sandbox Code Playgroud)

我想序列化包含此向量的另一个对象.除了这个向量序列化之外的所有东西都很好,但是一旦它到达向量,它会抛出:

terminate called after throwing an instance of 'boost::archive::archive_exception'
  what():  unregistered class - derived class not registered or exported
Run Code Online (Sandbox Code Playgroud)

我已经尝试了一些东西,包括在序列化之前显式注册父类型,用'BOOST_SERIALIZATION_ASSUME_ABSTRACT'等明确声明基本抽象类,但是,我在运行时留下了异常.

我想在记录中得到这个例子(和解决方案),以便其他人可以使用这个优秀的,如果有点不透明的库.一旦这个例子是正方形,我会将它提交给boost序列化维护者,以便在他们认为合适的FAQ或文档中包含.

示例代码复制下面的问题:

/*
    g++ -Iinclude/ -Llib -lboost_serialization ~/Desktop/ser_ex.cpp -o stest
*/
#include <boost/serialization/serialization.hpp>
#include <boost/serialization/nvp.hpp>
#include <boost/archive/xml_oarchive.hpp>
#include <boost/serialization/vector.hpp>

#include <iostream>
#include <fstream>
#include <string>
#include <vector>

namespace bser = boost::serialization;
class AA
{
public:
    virtual void foo() = 0;
    std::string name;

    template<class Archive>
    void serialize(Archive & ar, unsigned int file_version)
    {
        ar & …
Run Code Online (Sandbox Code Playgroud)

c++ polymorphism serialization boost exception

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

当找不到substr时,表达式评估为None

str.find()-1如果找不到则总是返回.我能写的,而不是表达str.find()return None如果没有发现?

python string

9
推荐指数
3
解决办法
200
查看次数

去 - 打印项目之间没有空格

fmt.Println("a","b")
Run Code Online (Sandbox Code Playgroud)

我想打印没有空格填充的两个字符串,即"ab",但上面将打印"a b".

去fmt

我只是切换到使用Printf

fmt.Printf("%s%s\n","a","b")
Run Code Online (Sandbox Code Playgroud)

go

8
推荐指数
2
解决办法
4835
查看次数

一旦成为标准的一部分 - 将提升库失去其boost命名空间并将被移动到std?

一旦Boost库(我已经读过十个Boost库被认为是标准库的一部分)成为标准库的一部分 - 它是否会保留它的boost命名空间或代码最终会在std命名空间中?

如果是后者 - 你将如何解决代码中潜在的命名空间冲突.

干杯.

c++ standards boost c++11

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