相关疑难解决方法(0)

什么时候应该使用static_cast,dynamic_cast,const_cast和reinterpret_cast?

有什么用途:

  • static_cast
  • dynamic_cast
  • const_cast
  • reinterpret_cast
  • C风格演员 (type)value
  • 功能式演员 type(value)

如何决定在哪些特定情况下使用哪个?

c++ pointers casting c++-faq

2367
推荐指数
9
解决办法
52万
查看次数

13
推荐指数
3
解决办法
9772
查看次数

允许转换为void(不是指针),为什么?

为什么我可以将此向量转换为void(甚至不是指针)?

int main()
{
   std::vector<int> a;
   (void)a;
}
Run Code Online (Sandbox Code Playgroud)

怎么允许这个?

c++ language-lawyer

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

这段代码在做什么?(为size_t)-1-

有人可以解释当size_t或任何其他类型标识符包含在括号中时会发生什么.我知道这是旧的类型转换语法,但在这种情况下,我不会关注正在发生的事情.

我已经看到它将类型的最大大小定义为:

size_t max_size = (size_t)-1
Run Code Online (Sandbox Code Playgroud)

c++

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

我应该使用shared_ptr <Object> myObject =(shared_ptr <Object>)new Object()来访问私有构造函数吗?

我正在使用代码库,它广泛使用以下语法:

shared_ptr<Object> myObject = (shared_ptr<Object>) new Object();
Run Code Online (Sandbox Code Playgroud)

我注意到我无法访问私有构造函数make_shared,但shared_ptr<Object> myObject = (shared_ptr<Object>) new Object();工作得很好.我应该使用它只是因为它似乎工作?有危险吗?它有什么不同make_shared

我知道这个问题的答案,它在make_shared和之间进行了比较:

std::shared_ptr<Object> p2(new Object("foo"));
Run Code Online (Sandbox Code Playgroud)

但是我找不到对我遇到的语法的引用.它是不同的,还是与上面相同?

c++ constructor shared-ptr c++11

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

((int) a) 和 (int(a)) 之间有什么区别?

((int) a)和 和有(int(a))什么区别?

第二个表达式在纯“?”中有效吗?

c c++ type-conversion

7
推荐指数
2
解决办法
447
查看次数

警告:从“long int”转换为“double”可能会改变其值

我的代码如下:

#include <iostream>
#include <sys/time.h>
using namespace std;

int main(int argc, char** argv) {
                if(argv[0])
                        argc++;

                struct timeval m_timeEnd, m_timeCreate, m_timeStart;
        long mtime, alltime, seconds, useconds;

                gettimeofday(&m_timeStart,NULL);
                sleep(3);
                gettimeofday(&m_timeCreate,NULL);
                sleep(1);

        gettimeofday(&m_timeEnd, NULL);
        seconds  = m_timeEnd.tv_sec  - m_timeStart.tv_sec;
        useconds = m_timeEnd.tv_usec - m_timeStart.tv_usec;

        mtime = (long) (((seconds) * 1000 + useconds/1000.0) + 0.5);
        seconds = useconds = 0;
        seconds  = m_timeEnd.tv_sec  - m_timeCreate.tv_sec;
        useconds = m_timeEnd.tv_usec - m_timeCreate.tv_usec;
        alltime = (long) (((seconds) * 1000 + useconds/1000.0) + 0.5);

        printf("IN=%ld ALL=%ld milsec.\n", …
Run Code Online (Sandbox Code Playgroud)

c++ linux g++ compiler-warnings

5
推荐指数
1
解决办法
8659
查看次数

在C++中将十六进制值打印到控制台

#include <iostream>
#include <iomanip>

using namespace std;

int main()
{
    char array[10];

    for(int i = 0; i<10;i++)
    {
        array[i] = 'a' + i;
    }

    char* test = array;

    printf("%x\n", test);
    cout << hex << test << endl;

}
Run Code Online (Sandbox Code Playgroud)

这个输出是:

bffff94e
abcdefghijN???
Run Code Online (Sandbox Code Playgroud)

为什么不打印相同的东西?

c++

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

使用类型转换构造函数的参数的问题

#include <iostream>

struct Foo
{
    Foo(int d) : x(d) {}
    int x;
};

int main() 
{ 
    double x = 3.14;

    Foo f( int(x) );

    std::cout << f.x << std::endl;

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

当我编译此代码时,我收到以下错误:

[错误]请求'f'中的成员'x',这是非类型'Foo(int)'

假设在int main我删除intFoo f(int(x)).我的意思是如果我这样写:

     Foo f(x);
Run Code Online (Sandbox Code Playgroud)

代码编译正确,输出为3.

那么如果我们输入类似Foo f(int(x))的参数来调用构造函数会发生什么呢?

c++ constructor

5
推荐指数
1
解决办法
127
查看次数

int(expr)在C++中的含义是什么?

当查看来自朋友项目的一些代码时,我最近看到的语法看起来像这样.

#include <iostream>

int main(){
    std::cout<< int(32.5/5)  << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

当你运行上面的代码时,你会得到6,如果使用int类似于强制转换的函数,这是期望的值.

但是,我以前从未见过这种语法,我在网上找不到它的文档.我也做了一个实验,发现这个语法无效C.

有人可以通过文档引用解释这种语法的含义吗?

c++

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

从 char 获取字节值

这很简单,但我遇到了问题。 http://www.ipix.lt/images/90928843.png 我想计算缓冲区[5]。但不是符号值,而是 255。尝试类型转换为 int 或 byte,但得到 -1。

c++ byte char

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

显式转换有多少级别?

代码片段#1

int n = 46341;
long long value = ((long long) (n * (n + 1))) / 2;
std::cout << value; // -1073716337 -- WRONG!
Run Code Online (Sandbox Code Playgroud)

代码片段#2

int n = 46341;
long long value = (long long)((long long)((long long)n * ((long long)n + 1))) / 2;
std::cout << value; // 1073767311 -- CORRECT!
Run Code Online (Sandbox Code Playgroud)

需要多少级显式转换才能产生所需的结果?

c++ casting literals implicit-conversion

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