C++ 11引入了std :: nearbyint和std :: round函数.两者都返回"最接近的"整数值.
我应该何时何地更喜欢一个?
我用以下值测试了它们0.5:
案例1:附近的演示
#include <iostream>
#include <cmath>
int main()
{
std::cout<<"nearbyint(0.5) = "<<std::nearbyint(0.5);
}
Run Code Online (Sandbox Code Playgroud)
输出: 0
案例2: 圆形演示
#include <iostream>
#include <cmath>
int main()
{
std::cout<<"round(0.5) = "<<std::round(0.5);
}
Run Code Online (Sandbox Code Playgroud)
输出: 1
为什么输出不同?
在下面的代码中,我为数组下标运算符提供了默认参数.
struct st
{
int operator[](int x = 0)
{
// code here
}
};
Run Code Online (Sandbox Code Playgroud)
但是,编译器生成了一个错误:
error: 'int st::operator[](int)' cannot have default arguments
int operator[](int x = 0)
Run Code Online (Sandbox Code Playgroud)
但是,如果我为函数调用运算符提供默认参数.
struct st
{
int operator()(int x = 0)
{
// code here
}
};
Run Code Online (Sandbox Code Playgroud)
它工作正常.
所以,我有一个问题:
c++ operator-overloading operators language-lawyer default-arguments
class = void以下代码片段的目的是什么?
template< class, class = void >
struct has_type_member : false_type { };
template< class T >
struct has_type_member<T, void_t<typename T::type>> : true_type { };
Run Code Online (Sandbox Code Playgroud) 为什么以下代码无法在C++ 14编译器中编译?如果我使用
const int i = 10;
int n = fun(i);
Run Code Online (Sandbox Code Playgroud)
编译器出错.
但是,如果我使用
int n = fun(10);
Run Code Online (Sandbox Code Playgroud)
而不是上述陈述,它工作正常.
例:
template<typename T>
int fun(const T&&)
{
cout<<"fun"<<endl;
}
int main()
{
// int i = 10; // Not work
const int i = 10; // Not work
int n = fun(i);
// int n = fun(10); // Working fine
}
Run Code Online (Sandbox Code Playgroud) 我复制并粘贴此URL中的代码,用于使用内核模块创建和读取/写入proc文件,并获取proc_root未声明的错误.同样的例子是在几个网站上,所以我认为它的工作原理.有什么想法我会收到这个错误吗?我的makefile需要不同的东西吗?下面是我的makefile:
基本proc文件创建的示例代码(直接复制和粘贴以完成初始测试):http: //tldp.org/LDP/lkmpg/2.6/html/lkmpg.html#AEN769
我正在使用的Makefile:
obj-m := counter.o
KDIR := /MY/LINUX/SRC
PWD := $(shell pwd)
default:
$(MAKE) ARCH=um -C $(KDIR) SUBDIRS=$(PWD) modules
Run Code Online (Sandbox Code Playgroud) 我似乎无法弄清楚国旗的目的-nostartfiles.它可以防止main()被立即调用,通常你也可以指定程序入口点.但是,为什么我要这样做呢?我编写了一个需要它的内核,因为一切都由我来开始,但除此之外,是否有非操作系统的理由来指定不同的程序入口点?
该函数返回-1.
但是,(void*)以下代码的含义是什么:
没有它可以工作吗?
test = shmat(shm_id, NULL, 0);
if (test == (void *)-1) {
/* handle shmat failure */
}
Run Code Online (Sandbox Code Playgroud) 在下面的代码中,我定义了一个带有类型的unscoped枚举long long.这个程序在Clang上工作正常.
但GCC编译器给出了模糊错误.
#include <iostream>
enum : long long { Var=5 };
void fun(long long ll)
{
std::cout << "long long : " << ll << std::endl;
}
void fun(int i)
{
std::cout << "int : " << i << std::endl;
}
int main()
{
fun(Var);
}
Run Code Online (Sandbox Code Playgroud)
GCC生成错误:
main.cpp: In function 'int main()':
main.cpp:17:12: error: call of overloaded 'fun(<unnamed enum>)' is ambiguous
fun(Var);
^
main.cpp:5:6: note: candidate: void fun(long long int)
void fun(long …Run Code Online (Sandbox Code Playgroud) 甲派生类对象可以被分配到一个基类对象在C++中.
Derived d;
Base b = d; // It's Ok
Run Code Online (Sandbox Code Playgroud)
但为什么不能将基类对象分配给派生类对象?
Base b;
Derived d = b; //Not Ok. Compiler give an error
Run Code Online (Sandbox Code Playgroud)
编辑:
对不起,这个问题实际上是在面试时提出来的.
我是C的新手.我需要通过以下代码了解屏幕上打印的每个值的含义:
#include<stdio.h>
int main()
{
int x = 10;
int *ptr = &x;
printf("%d %d %d\n", *ptr,**&ptr, 2**ptr);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出(GCC):
10 10 20
Run Code Online (Sandbox Code Playgroud)
在这里,我声明了变量x并ptr指向x变量.所以,*ptr印刷价值x.但我不明白的价值**&ptr和2**ptr.
提前致谢.