例如,我不能这样写:
class A
{
vector<int> v(12, 1);
};
Run Code Online (Sandbox Code Playgroud)
我只能写这个:
class A
{
vector<int> v1{ 12, 1 };
vector<int> v2 = vector<int>(12, 1);
};
Run Code Online (Sandbox Code Playgroud)
对C++ 11语言设计的差异有何考虑?
我想阻止我的类的用户将它用作自动变量,所以我编写如下代码:
class A {
private:
~A() = default;
};
int main() {
A a;
}
Run Code Online (Sandbox Code Playgroud)
我希望代码不会被编译,但是g ++编译它没有错误.
但是,当我将代码更改为:
class A {
private:
~A(){}
};
int main() {
A a;
}
Run Code Online (Sandbox Code Playgroud)
现在,g ++给出了~A()
私有的错误,这是我的期望.
"= default"析构函数和空析构函数之间有什么区别?
我写了一段这样的代码
int a;
int a = 100;
int main()
{
}
Run Code Online (Sandbox Code Playgroud)
它由GCC成功编译,但不是由G ++编译.
我猜GCC通过忽略变量a的第一个定义来处理这个问题.但我想知道准确的规则,这样我就不会错过任何东西.
谁能帮我吗?
我想基于参数是否是临时对象来重载两个函数,所以我编写如下代码:
#include <iostream>
void f(int &&)
{
std::cout << "&&" << std::endl;
}
void f(const int&)
{
std::cout << "const &" << std::endl;
}
int main()
{
int i;
f(i);
f(i + 1);
}
Run Code Online (Sandbox Code Playgroud)
它正确地输出:
const &
&&
Run Code Online (Sandbox Code Playgroud)
但是,当我更改代码以使用这样的模板时:
#include <iostream>
template <typename T>
void f(T &&)
{
std::cout << "&&" << std::endl;
}
template <typename T>
void f(const T&)
{
std::cout << "const &" << std::endl;
}
int main()
{
int i;
f(i);
f(i + 1);
}
Run Code Online (Sandbox Code Playgroud)
输出变为:
&& …
Run Code Online (Sandbox Code Playgroud) 例如,由于浮点数的精度,下面的代码会产生不希望的结果.
double a = 1 / 3.0;
int b = a * 3; // b will be 0 here
Run Code Online (Sandbox Code Playgroud)
我想知道如果我使用数学函数会出现类似的问题.例如
int a = sqrt(4); // Do I have guarantee that I will always get 2 here?
int b = log2(8); // Do I have guarantee that I will always get 3 here?
Run Code Online (Sandbox Code Playgroud)
如果没有,如何解决这个问题?
编辑:
实际上,当我为算法任务编程时,我遇到了这个问题.在那里,我想得到
最大的整数,是2的幂,小于或等于整数N.
所以圆函数无法解决我的问题.我知道我可以通过循环来解决这个问题,但它似乎不是很优雅.
我想知道是否
int a = pow(2, static_cast<int>(log2(N)));
Run Code Online (Sandbox Code Playgroud)
总能给出正确的结果.例如,如果N == 8,log2(N)有可能给出类似于2.9999999999999的内容,最终结果是4而不是8吗?
我发现C99添加_Complex
了支持复杂算术.但是,我想知道为什么C99为这样一个与字段相关的功能添加新关键字(仅对科学计算有用).通过标准库支持复杂类型不是更好吗?