小编qdi*_*dii的帖子

演员可以明确吗?

当涉及构造函数时,添加关键字会explicit阻止热情的编译器在不是程序员的第一个意图时创建对象.这种机制是否也适用于铸造操作员?

struct Foo
{
    operator std::string() const;
};
Run Code Online (Sandbox Code Playgroud)

例如,在这里,我希望能够投入Foo到一个std::string,但我不希望这种投射是隐含的.

c++ casting explicit operator-keyword

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

如何使用Bash读取超时?

我可以要求用户按Enter使用read,并让他通过调用等sleep.但我想不出同时做两件事的方法.我希望用户可以选择:

Ctrl+ C取消,Enter 继续或等待10秒

我怎样才能做到这一点?

io bash timeout

64
推荐指数
3
解决办法
4万
查看次数

为什么unique_ptr在shared_ptr只占用一个时会占用两个模板参数?

双方unique_ptrshared_ptr接受定制的析构函数他们所拥有的对象上调用.但在的情况下unique_ptr,析构函数作为一个模板参数传递,而类型shared_ptr的自定义析构函数将被指定为一个模板参数的构造函数.

template <class T, class D = default_delete<T>> 
class unique_ptr
{
    unique_ptr(T*, D&); //simplified
    ...
};
Run Code Online (Sandbox Code Playgroud)

template<class T>
class shared_ptr
{
    template<typename D>
    shared_ptr(T*, D); //simplified
    ...
};
Run Code Online (Sandbox Code Playgroud)

我不明白为什么会有这样的差异.需要什么?

c++ std shared-ptr unique-ptr c++11

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

为什么需要这个强制转换为bool?

template<typename InputIterator, typename Predicate>
inline InputIterator
find_if(InputIterator first, InputIterator last, Predicate pred, input_iterator_tag)
{
    while (first != last && !bool(pred(*first)))
         ++first;

    return first;
}
Run Code Online (Sandbox Code Playgroud)

我在GCC 4.7.0附带的C++标准库的实现的源代码中遇到了这个片段.这是find_if输入迭代器的特化.我清理了前导下划线,使其更具可读性.

他们为什么bool在谓词上使用强制转换?

c++ gcc casting standard-library

36
推荐指数
2
解决办法
1984
查看次数

为什么不能使用HTTPS进行CNAME重定向

Google存储文档页面指出,You can use a CNAME redirect only with HTTP, not with HTTPS.但我看不出任何理由.谁能解释我为什么?

dns https redirect cname http

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

你如何在OpenGL中获得模型视图和投影矩阵?

我试图使用OpenGL着色语言(GLSL)1.5版来制作顶点和几何着色器.

我已经了解到在GLSL 1.5版中,gl_ModelViewProjectionMatrix不推荐使用内置变量,所以你必须手动传递它们.如果我已经设置了模型视图和投影矩阵(使用gluLookAtgluPerspective例如),那么如何让矩阵传递到顶点和几何着色器?我做了一些搜索,一些网站似乎提到了一个函数glGetMatrix(),但我在任何官方文档中找不到该函数,并且它似乎不存在于我正在使用的实现中(unknown identifier: glGetMatrix当我得到编译错误时)尝试用该函数编译它).

opengl glsl

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

我可以假设用较小的大小调用realloc可以释放余数吗?

让我们考虑一下这段很短的代码片段:

#include <stdlib.h>

int main()
{
    char* a = malloc(20000);
    char* b = realloc(a, 5);

    free(b);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

在阅读了realloc的手册页后,我不完全确定第二行会导致释放19995个额外字节.引用手册页:The realloc() function changes the size of the memory block pointed to by ptr to size bytes.但是根据该定义,我可以确定其余的将被释放吗?

我的意思是,指向的块b肯定包含5个空闲字节,所以对于懒惰的顺从分配器是否足以让realloc行不做任何事情?

注意:我使用的分配器似乎释放了19 995个额外字节,如valgrind在注释掉free(b)行时所示:

==4457== HEAP SUMMARY:
==4457==     in use at exit: 5 bytes in 1 blocks
==4457==   total heap usage: 2 allocs, 1 frees, 20,005 bytes allocated
Run Code Online (Sandbox Code Playgroud)

c malloc free realloc

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

可以在堆栈上分配const静态字符串吗?

const char * foo()
{
    return "abcdef";
}

int main()
{
    printf("%s", foo());
}
Run Code Online (Sandbox Code Playgroud)

符合标准的编译器是否可以决定"abcdef"在堆栈上进行分配?即标准中的内容强制编译器在该.data部分中分配它?

c c++ memory

21
推荐指数
3
解决办法
2201
查看次数

我可以忽略gcc警告:'Foo :: m_bar'应该在成员初始化列表中初始化[-Weffc ++]

struct Bar
{
    Bar() {}
};


struct Foo
{
    Foo() = default;
    Bar m_bar;
};

int main()
{
    Foo foo;
}
Run Code Online (Sandbox Code Playgroud)

使用C++ 11 default关键字和gcc警告时-Weffc++,gcc输出:

警告:'Foo :: m_bar'应该在成员初始化列表中初始化[-Weffc ++]

忽略这个警告是否安全?我应该向gcc提交错误吗?

c++ gcc warnings compilation c++11

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

返回的对象如何可分配?

在Effective C++,第3项中,Scott Meyers建议重载operator*一个名为的类Rational:

    class Rational { ... };
    const Rational operator*(const Rational& lhs, const Rational& rhs);
Run Code Online (Sandbox Code Playgroud)

返回值被const限定的原因在下面的行中解释:如果不是const,程序员可以编写如下代码:

    (a * b) = c;
Run Code Online (Sandbox Code Playgroud)

或者,更可能是:

     if (a*b = c)
Run Code Online (Sandbox Code Playgroud)

很公平.现在我很困惑,因为我认为函数的返回值,这里是operator*,是一个rvalue,因此不能赋值.我认为它不是可转让的,因为如果我有:

    int foo();
    foo() += 3;
Run Code Online (Sandbox Code Playgroud)

那将无法编译invalid lvalue in assignment.为什么不在这里发生?有人可以对此有所了解吗?

编辑:我在Scott Meyers的那个项目上看到过很多其他线程,但是没有人解决我在这里暴露的rvalue问题.

c++ const rvalue

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