有什么用途:
static_castdynamic_castconst_castreinterpret_cast(type)valuetype(value)如何决定在哪些特定情况下使用哪个?
可能的重复:
C++演员语法样式
C++:函数(myVar)和(函数)myVar有什么区别?
(类型)值和类型(值)之间有什么区别?
b = (int) a; // c-like cast notation b = int (a); // functional notation
为什么我可以将此向量转换为void(甚至不是指针)?
int main()
{
std::vector<int> a;
(void)a;
}
Run Code Online (Sandbox Code Playgroud)
怎么允许这个?
有人可以解释当size_t或任何其他类型标识符包含在括号中时会发生什么.我知道这是旧的类型转换语法,但在这种情况下,我不会关注正在发生的事情.
我已经看到它将类型的最大大小定义为:
size_t max_size = (size_t)-1
Run Code Online (Sandbox Code Playgroud) 我正在使用代码库,它广泛使用以下语法:
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)
但是我找不到对我遇到的语法的引用.它是不同的,还是与上面相同?
((int) a)和 和有(int(a))什么区别?
第二个表达式在纯“?”中有效吗?
我的代码如下:
#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) #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)
为什么不打印相同的东西?
#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我删除int的Foo f(int(x)).我的意思是如果我这样写:
Foo f(x);
Run Code Online (Sandbox Code Playgroud)
代码编译正确,输出为3.
那么如果我们输入类似Foo f(int(x))的参数来调用构造函数会发生什么呢?
当查看来自朋友项目的一些代码时,我最近看到的语法看起来像这样.
#include <iostream>
int main(){
std::cout<< int(32.5/5) << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
当你运行上面的代码时,你会得到6,如果使用int类似于强制转换的函数,这是期望的值.
但是,我以前从未见过这种语法,我在网上找不到它的文档.我也做了一个实验,发现这个语法无效C.
有人可以通过文档引用解释这种语法的含义吗?
这很简单,但我遇到了问题。 http://www.ipix.lt/images/90928843.png 我想计算缓冲区[5]。但不是符号值,而是 255。尝试类型转换为 int 或 byte,但得到 -1。
代码片段#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)
需要多少级显式转换才能产生所需的结果?