小编Max*_*xpm的帖子

函数的模糊引用/值版本

考虑以下函数原型:

void Remove(SomeContainer& Vec, const std::size_t Index);

SomeContainer Remove(SomeContainer Vec, const std::size_t Index);
Run Code Online (Sandbox Code Playgroud)

第二个是第一个实现的.也就是说,它们在各个方面在功能上是相同的,除了一个是通过引用传递而另一个是按值传递.

但是,GCC说这些在这种情况下是模糊的,即使第一种形式是唯一一种不返回值的形式:

Remove(SomeContainer, 123);
Run Code Online (Sandbox Code Playgroud)

有没有解决方法,或者我必须为每个表单提出不同的名称?

c++ overloading ambiguity

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

CLOCKS_PER_SEC与std :: clock()不匹配的结果

我正在使用以下短程序来测试std::clock():

#include <ctime>
#include <iostream>

int main()
{   
    std::clock_t Begin = std::clock();

    int Dummy;
    std::cin >> Dummy;

    std::clock_t End = std::clock();

    std::cout << "CLOCKS_PER_SEC: " << CLOCKS_PER_SEC << "\n";
    std::cout << "Begin: " << Begin << "\n";
    std::cout << "End: " << End << "\n";
    std::cout << "Difference: " << (End - Begin) << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

但是,在等待几秒钟输入"虚拟"值后,我得到以下输出:

CLOCKS_PER_SEC: 1000000
Begin: 13504
End: 13604
Difference: 100
Run Code Online (Sandbox Code Playgroud)

这显然没有多大意义.无论我等多久,差异总是在100左右.

我错过了什么?我忘了包含一些标题吗?

我正在使用Xcode和GCC 4.2.

c++ time xcode gcc clock

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

关于矢量记忆分配的聪明才智

假设我必须迭代一个可能非常大的数字向量,并将偶数和奇数元素复制到新的单独向量中.(源向量可以有任何比例的均衡;它可以是所有均匀,所有可能性,或介于两者之间.)

为简单起见,push_back通常用于此类事情:

for (std::size_t Index; Index < Source.size(); Index++)
{
    if (Source[Index] % 2) Odds.push_back(Source[Index]);
    else Evens.push_back(Source[Index]);
}
Run Code Online (Sandbox Code Playgroud)

但是,我担心如果它被用作类似排序算法的实现的一部分,这将是低效的并且是有害的,其中性能是最重要的.例如,QuickSort涉及像这样分离元素.

您可以使用reserve()先前分配内存,因此只需要一次分配,但是您必须迭代整个源向量两次 - 一次计算需要整理的元素数量,再次进行实际复制.

当然,你可以分配与源向量大小相同的空间量,因为新的向量都不需要保留更多,但这似乎有些浪费.

有没有更好的方法让我失踪?是push_back()平时信任来管理这样的事情对于程序员,或者它可以为敏感的算法成为负担?

c++ performance memory-management vector push-back

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

我们为什么要发送确认电子邮件?

要求用户提供电子邮件地址有什么好处,我们只发送一封电子邮件来完成注册过程?它肯定无法抵御(D)DoS攻击,我也看不出它如何提高安全性.

registration confirmation-email

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

为什么没有编译其他模块?

我有两个文件:Main.dImportMe.d.他们的目的应该是不言自明的.它们位于同一目录中,没有明确的模块声明.Main.d但是,当我尝试编译时,我收到"找不到符号"错误!

$ dmd Main.d -I.

Undefined symbols:
  "_D8ImportMe12__ModuleInfoZ", referenced from:
      _D4Main12__ModuleInfoZ in Main.o
  "_D8ImportMe8SayHelloFxAyaZv", referenced from:
      __Dmain in Main.o
ld: symbol(s) not found
collect2: ld returned 1 exit status
--- errorlevel 1
Run Code Online (Sandbox Code Playgroud)

同时编译这两个文件工作正常.

$ dmd Main.d ImportMe.d
Run Code Online (Sandbox Code Playgroud)

但是,您不必使用标准库执行此操作.它有什么不同的做法?更改包含路径via -I没有可见效果.

command-line module d compilation dmd

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

为什么这个侦听器不会检测窗口关闭事件?

我正在尝试在单个Frame通道上侦听事件WindowStateListener.

import java.awt.Frame;
import java.awt.Label;

import java.awt.event.WindowStateListener;
import java.awt.event.WindowEvent;

public class UserInterface implements WindowStateListener
{
    public static void main(final String[] arguments)
    {
        UserInterface userInterface = new UserInterface();
    }

    public UserInterface()
    {
        Frame frame = new Frame("Graphics Example");
        frame.addWindowStateListener(this);
        frame.add(new Label("Hello, world!");
        frame.pack();
        frame.setVisible(true);
    }

    public void windowStateChanged(WindowEvent event)
    {
        System.out.println(event.paramString();
    }
}
Run Code Online (Sandbox Code Playgroud)

它适用于最小化事件,但不适用于近似事件. WINDOW_CLOSING绝对是一个有效的WindowEvent价值,它肯定是Frame可以抛出的东西.那么为什么不传递给它windowStateChanged()呢?

java events swing awt windowlistener

4
推荐指数
2
解决办法
4071
查看次数

close(2) 之后调用 fsync(2)

设想:

任务代码(错误检查省略):

// open, write and close
fd = open(name);
write(fd, buf, len);
close(fd);
< more code here **not** issuing read/writes to name but maybe open()ing it >
// open again and fsync
fd = open(name);
fsync(fd);
Run Code Online (Sandbox Code Playgroud)

name系统中不再有任务同时访问。

它是否已定义,更重要的是,它是否会同步 所引用的 inode 上可能的未完成写入name?即,我会buf在 fsync 之后从文件中读回吗?

来自 POSIX http://pubs.opengroup.org/onlinepubs/009695399/functions/fsync.html我想说这似乎合法......

谢谢。

5 月 18 日编辑:感谢您的回答和研究。我(2016 年)向 extfs 首席开发人员之一(Ted)提出了这个问题,并得到了这样的答案:“Posix 不保证它,但实际上它应该适用于大多数文件系统,包括 ext4。Posix 中的关键词规格为:

fsync()函数应请求将由命名的打开文件描述符的fildes所有数据传输到与 所描述的文件关联的存储设备fildes

它没有说“...描述的文件的所有数据fildes”,而是说“打开的文件描述符的所有数据”。因此从技术上讲,不能保证由另一个文件描述符写入的数据会同步到磁盘。

实际上,文件系统不会尝试通过 fd 进入的脏数据,因此您无需担心。编写的内容超过严格要求的操作系统是符合标准的,因此您通常会发现这一点,即使它没有得到保证。”这比“完全相同的持久保证”不太具体,但相当权威,尽管可能已经过时了。

我想做的是一个适用于单个文件的“同步”命令。就像 …

c unix linux filesystems posix

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

组织不良实践的子命名空间?

将子命名空间用于纯粹的组织目的会被视为不良做法吗?例如:

namespace vehicles
{
    namespace cars
    {
        // Stuff here
    }

    namespace boats
    {
        // More stuff here
    }
}
Run Code Online (Sandbox Code Playgroud)

我可以看到这对大型项目来说会是一个什么问题,因为输入vehicles::cars::function很多东西会很不方便.那么小项目呢?

c++ namespaces organization

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

类析构函数中的错误

我刚刚开始我的容器类,我已经遇到了问题:

class Container
{
    private:

    string* BasePointer; // The starting pointer.
    unsigned int Capacity; // The number of values the container can hold.

    public:

    Container() // Default constructor.
    {
        Capacity = 1;
        BasePointer = new string[Capacity];
    }

    ~Container() // Destructor.
    {
        delete BasePointer; // Delete the container to prevent memory leaking.
    }
};
Run Code Online (Sandbox Code Playgroud)

我收到了错误Container Classes(26467) malloc: *** error for object 0x100100088: pointer being freed was not allocated.我做错了什么?

c++ pointers destructor memory-leaks class

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

访问类中的值类似于boost :: any

我正在boost::any为教育目的制作一个类似于简单的类,但我无法弄清楚如何访问存储的值.我可以完美地设置值,但是当我尝试访问"holder"类中的任何成员时,编译器只会抱怨在派生自的类中找不到该成员.我不能virtual因为模板而声明成员.

这是相关的代码:

class Element
{
    struct ValueStorageBase
    {
    };

    template <typename Datatype>
    struct ValueStorage: public ValueStorageBase
    {
        Datatype Value;

        ValueStorage(Datatype InitialValue)
        {
            Value = InitialValue;
        }
    };

    ValueStorageBase* StoredValue;

public:

    template <typename Datatype>
    Element(Datatype InitialValue)
    {
        StoredValue = new ValueStorage<Datatype>(InitialValue);
    }

    template <typename Datatype>
    Datatype Get()
    {
        return StoredValue->Value; // Error: "struct Element::ValueStorageBase" has no member named "Value."
    }
};
Run Code Online (Sandbox Code Playgroud)

c++ oop derived-class boost-any

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