小编Pet*_*ker的帖子

为什么这个函数调用不明确?

我正在阅读标准并试图弄清楚为什么没有演员表就无法解决此代码.

void foo(char c) { }

// Way bigger than char
void foo(unsigned long int) { }

int main()
{
   foo(123456789); // ambiguous
   foo((unsigned long int) 123456789); // works
}
Run Code Online (Sandbox Code Playgroud)

这就是它所说的:

4.13整数转换排名[conv.rank]

每个整数类型都有一个整数转换等级,定义如下:

- 任何无符号整数类型的等级应等于相应有符号整数类型的等级.

- char的等级应等于signed char和unsigned char的等级.

特别是,我的jimmies的沙沙声是它没有说任何无符号整数类型,只是unsigned char.我的猜测是,char通过转换被提升为无符号类型.这是真的?

c++ integer integer-promotion implicit-conversion unsigned-integer

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

C++重载运算符两次,一次返回非const引用和另一个const引用,有什么偏好?

我使用相同的参数列表重载操作符两次.但具有不同的返回类型:

T& operator()(par_list){blablabla}    
const T& operator()(par_list){blablabla}
Run Code Online (Sandbox Code Playgroud)

所以当我调用()运算符时,将根据什么偏好或情况调用哪个函数?我知道如果我在const函数下调用()它必须是const T&one.

我只是好奇C++如何处理这种情况以及默认偏好如何工作.

谢谢

c++ const reference operator-overloading operator-keyword

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

仅用1位设置检测整数的优化

我有一个功能:

inline uint32_t ShiftOf(uint32_t v)
{
    for (uint32_t s = 0; s < 32; ++s)
    {
        if (v == 1 << s)
            return s;
    }
    return -1;
}
Run Code Online (Sandbox Code Playgroud)

有没有办法优化它?

c++ optimization

12
推荐指数
3
解决办法
1370
查看次数

继承的构造函数,默认构造函数和可见性

[namespace.udecl]/18所述:

[...]命名构造函数的using声明不会创建同义词; 相反,如果在用于构造相应基类的对象时可以访问附加构造函数,则可以访问这些附加构造函数,并忽略using-declaration的可访问性.[...]

因此,以下代码无法编译:

class B { protected: B(int) { } };
class D: B { using B::B; };
int main () { D d{0}; }
Run Code Online (Sandbox Code Playgroud)

它返回的错误与所有主要编译器大致相同:

在这里宣布受保护

另一方面,以下代码编译:

class B { protected: B() { } };
class D: B { using B::B; };
int main () { D d{}; }
Run Code Online (Sandbox Code Playgroud)

它是否应该因为导致上一个示例中的错误的相同原因而无法编译?
它允许编译什么?

c++ default-constructor language-lawyer c++11 inherited-constructors

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

Qt/webkit和flash

我在xp上安装了pyqt 4.8.1,在包中安装了Qt.我有一个标签

<object ...>
<param value='1.swf'>
<embed src='1.swf'></embed>
</param>
</object>
Run Code Online (Sandbox Code Playgroud)

但是Qt/webkit没有显示flash.(代码和IE或Chrome没有问题).Qt/webkit是否支持flash?

flash qt webkit qtwebkit

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

将std :: unique_ptr转换为std :: unique_ptr到超类的正确方法是什么?

假设我有一个被称为foo继承自类的类bar.

我有一个std::unique_ptr实例,foo我想将它传递给一个只需要的函数std::unique_ptr<bar>.如何转换指针使其在我的函数中工作?

c++ c++11

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

如何在C++中实现指向成员函数的指针?

c ++中指向成员函数的指针分为三部分:

Offset
Address/index
virtual?
Run Code Online (Sandbox Code Playgroud)

当使用调用派生对象时,偏移用于指针调整 base pointer.

这个偏移是如何实现的?它是指向某个表的指针,每个派生类有一个表,该表是否包含表单的条目(base X, offset)

另外,我在哪里可以获得更多关于此的信息?

c++ pointers function-pointers multiple-inheritance

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

为什么在进行"character + 1"时我没有告诉它进行类型转换?

当增加字符时,例如:char character{'a'};is 'a'和INT是97.当我说"人物+ 1"或"+ 1"我将获得整数值98没有'b'.现在,如果我做"++ character",我将获得char'b'.

char character{'a'};
cout << character + 1 << '\n';
cout << ++character << '\n';
Run Code Online (Sandbox Code Playgroud)

c++ ascii

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

C++ 中 extern "C" 的调用约定是什么?

标题确实准确描述了我的要求。

extern "C" int foo( int bar ) { return bar; }
Run Code Online (Sandbox Code Playgroud)

从我一直在测试的内容来看,它似乎不是__cdecl, __stdcall, __fastcall,而且显然不是__thiscall

什么是约定以及它如何运作?

谢谢。

c c++ windows

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

为什么“std::shared_ptr&lt;T[]&gt;”的明显用法不起作用?

似乎std::shared_ptr<T[]>(随 C++ 17 添加) 的明显用途是保存指向 的指针T,并delete[]在需要销毁托管对象时使用。但是这段代码:

#include <memory>

int main() {
    std::shared_ptr<int[]> sp(new int[3]);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

无法使用我尝试过的任何在线编译器进行编译。在所有情况下,错误消息都是以下内容的变体:

/Library/Developer/CommandLineTools/usr/bin/../include/c++/v1/memory:3759:18:注意:候选模板被忽略:要求 'is_convertible<int *, int (*)[]>::value'不满足[_Yp = int]显式shared_ptr(_Yp* __p,

也就是说,采用指针的构造函数会得到 SFINAED ,因为指向元素类型的指针不可转换为指向数组的指针。这似乎是 C++ 17 标准和 C++ 20 中所要求的。

这真的是有意的吗?我该如何使用该构造函数?或者,如何创建一个std::shared_ptr在不显式指定删除器的情况下正确管理数组的对象?

c++ shared-ptr c++17

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