相关疑难解决方法(0)

什么是"这个的右值参考"?

在clang的C++ 11状态页面中遇到了一个名为"rvalue reference for*this"的提案.

我已经阅读了很多关于rvalue引用并理解它们的内容,但我认为我不知道这一点.我也无法使用这些条款在网上找到太多资源.

页面上的提案文件有一个链接:N2439(将移动语义扩展到*this),但我也没有从中获得太多的例子.

这个功能是什么?

c++ qualifiers c++-faq move-semantics c++11

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

带有签名/无符号整数和函数调用的C/C++最佳实践

我问这个问题有两种不同的语言:C和C++.

调用具有相反整数符号期望的函数时,最佳做法是什么?

例如:

uint32       _depth;                        // uint32 = DWORD
int          depth;

_BitScanForward(&_depth, (uint32)input);    // DWORD, DWORD
depth = (int)_depth;
Run Code Online (Sandbox Code Playgroud)

_BitScanForward期待DWORD(uint32)参数.变量input是int16类型,我需要_depth在我的代码中将结果作为int32 处理.

  1. 我需要关注input如图所示的铸造吗?我知道编译器可能会为我做,但最佳做法是什么?
  2. 声明_depth为int32 是否可以接受,因此避免如后所示将其强制转换为?

注意:

我对编译器的评论是基于经验的.我编写的代码在VS中没有警告编译但在执行时崩溃.原来我正在调用一个incorect width int的函数.所以我不再把这个话题留给编译器了.

编辑:

答案很有帮助,谢谢.让我提炼我的问题.如果没有宽度问题,即函数不期望比传入的更窄的int(obvioulsy将失败),那么依靠编译器来处理符号和宽度差异是否可以?

c c++

32
推荐指数
2
解决办法
3406
查看次数

operator [](const char*)歧义

以下代码

#include <string>

struct Foo {
    operator double() {
        return 1;
    }

    int operator[](std::string x) {
        return 1;
    }
};

int main() {
    Foo()["abcd"];
}
Run Code Online (Sandbox Code Playgroud)

使用g ++进行编译很好,但由于声明的方法和本机运算符之间存在歧义,因此使用clang和intel编译器会失败[].

如果Foo有一个隐式转换int,我会很清楚,但转换是这样的double.这不是解决歧义吗?

c++

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

使用模板转换运算符时,重载运算符'[]'的使用不明确

以下代码在gcc 7.3.0中编译良好,但不与clang 6.0.0编译.

#include <string>

struct X {
    X() : x(10) {}
    int operator[](std::string str) { return x + str[0]; }
    template <typename T> operator T() { return x; } // (1) fails only in clang
    //operator int() { return x; } // (2) fails both in gcc and clang
private:
    int x;
};

int main() {
    X x;
    int y = 20;
    int z = int(x);
    return x["abc"];
}
Run Code Online (Sandbox Code Playgroud)

我使用命令clang++ 1.cpp -std=c++98指定不同的标准版本.我试过c ++ 98,11,14,17,2a.在所有情况下,错误都是相同的.clang中的错误消息如下:

1.cpp:14:13: error: use …
Run Code Online (Sandbox Code Playgroud)

c++ language-lawyer

11
推荐指数
2
解决办法
357
查看次数

标签 统计

c++ ×4

c ×1

c++-faq ×1

c++11 ×1

language-lawyer ×1

move-semantics ×1

qualifiers ×1