模板类的方法是否隐含了inline
链接(不是在谈论内联优化),还是只是模板化的方法?
// A.h
template<typename T>
class A
{
public:
void func1(); // #1
virtual void func2(); // #2
template<typename T2> void func3(); // #3
};
template<typename T>
void A<T>::func1(){} // #1
template<typename T>
void A<T>::func2(){} // #2
template<typename T>
template<typename T2>
void A<T>::func3<T2>(){} // #3
Run Code Online (Sandbox Code Playgroud)
以上所有案例都是inline
[联系]吗?(我应该明确写inline
任何一个)?
一位同事和我正在讨论const或参考成员是否是正确的事情.const和引用成员使类不可复制且不可移动,除非您编写自己的副本并移动忽略引用或const成员的运算符.我找不到一个忽略复制或移动某些成员只是因为它们是引用或const有意义的情况.
我认为拥有一个不可移动的对象很少在逻辑上是合理的,并且是一个选择,它只与该类是否是位置不变有关.不可复制的对象更常见,但是使类不可复制的选择与它是否拥有逻辑上不可复制的资源,如果它代表唯一的所有权等有关.我想不出一个理由的唯一特征是拥有引用或const成员是否意味着该类应具有这些特征中的任何一种(不可复制或不可复制)
他们应该曾经被使用?应该是一个而不是另一个吗?有什么例子?
请参阅以下内容:
struct A
{
std::string* get() const
{
//return const_cast<std::string*>(&m_pObj);
return &const_cast<A*>(this)->m_pObj;
}
std::string m_pObj;
};
Run Code Online (Sandbox Code Playgroud)
被取消引用const_cast
的this
UB?有没有时间从const_cast
指针的常量取消引用结果不会调用UB?
(我知道上面的例子是不好的做法,糟糕的设计,并且可以用可变的方式解决 - 这不是重点)
auto lambda = [](){ return 7; };
std::result_of<decltype(lambda)()>::type val = lambda(); // 'val' : illegal use of type 'void'
Run Code Online (Sandbox Code Playgroud)
我收到错误:'val' : illegal use of type 'void'
.为什么类型会解析为无效?
我可能弄错了什么result_of
让我.我只想要任何我能传递的返回值std::function
.
我很长一段时间的直觉和实践是尽可能避免使用params.我相信一个函数应该有一个逻辑目的,通常意味着一个返回类型(不返回多个东西).有时,返回多个东西是可取的(fe std :: map :: insert).我知道这可以作为一对/元组或输出参数来完成; 使用哪一个对我来说不那么重要.
偏好输出参数或返回值的概念,设计或性能原因是什么?
在标准的第12节中,每个特殊成员函数都有一组导致它implicitly declared as defaulted
的规则和另一组导致的规则a defaulted [special member function to be] defined as deleted
.
这使得(对我而言)当特殊成员函数没有用户声明的版本时,有3种可能的状态:声明和定义(defaulted
),声明和未定义(deleted
),以及未声明.这准确吗?如果是这样,有什么意义,而不是削减'未申报'选项?
*declared as defaulted
似乎是一个错误,不应该被"定义"为违约吗?
以下内容会导致错误,因为在读取超过文件末尾之前file.eof()
显然不会返回true
.我该怎么做?
std::ifstream file("something.stuff", std::ios::in|std::ios::binary);
while(!file.eof())
{
double x, y, z;
file.read(reinterpret_cast<char*>(&x), sizeof(x)); // Do I need to check if(file) after every read?
file.read(reinterpret_cast<char*>(&y), sizeof(y));
file.read(reinterpret_cast<char*>(&z), sizeof(z));
// Do something with xyz
}
Run Code Online (Sandbox Code Playgroud) isnan返回一个int ... nonzero value if arg is NaN, ?0? otherwise
.为什么不回归布尔?这不是一些传统的东西,它是C++ 11的新功能.
你如何调整大小AVFrame
?一世
这是我目前正在做的事情:
AVFrame* frame = /*...*/;
int width = 600, height = 400;
AVFrame* resizedFrame = av_frame_alloc();
auto format = AVPixelFormat(frame->format);
auto buffer = av_malloc(avpicture_get_size(format, width, height) * sizeof(uint8_t));
avpicture_fill((AVPicture *)resizedFrame, (uint8_t*)buffer, format, width, height);
struct SwsContext* swsContext = sws_getContext(frame->width, frame->height, format,
width, height, format,
SWS_BILINEAR, nullptr, nullptr, nullptr);
sws_scale(swsContext, frame->data, frame->linesize, 0, frame->height, resizedFrame->data, resizedFrame->linesize);
Run Code Online (Sandbox Code Playgroud)
但毕竟这resizedFrames->width
和height
仍然0时,AVFrame样子垃圾的内容,我得到一个警告,数据不对齐,当我打电话sws_scale
。注意:我不想更改像素格式,也不想对其进行硬编码。
我见过有资格在上下文cv修饰符使用:
非限定类型可以隐式转换为const
但是我也看到了限定用于表示任何嵌套类型:
MyClass :: MyNestedType x;
编译器是否具有生成所有全局变量的依赖关系树所需的所有信息,并为它们创建定义良好且正确的初始化顺序?我意识到你可以用全局变量写一个循环依赖 - 只做那种情况下未定义的行为 - 并且编译器可以警告并且可能有关它的错误.
通常这种情况的原因是它会给编译器制造商带来负担,或导致编译速度显着降低.我没有任何指标或证据表明在这种情况下这些都不是真的,但我倾向于两者都不是真的.
编程C++的新手,并且在使用isaplha来重新计算并在参数为字母时显示错误消息时遇到问题.A,A1和以字母开头的字母数字的任何组合都会显示错误,1a将如何传递为不包含字母.我的代码如下.
for(int s = 1; s< argc; s++)
{
if (isalpha(*argv[s]))
{
cout << "You have entered a letter, however letters are not valid arguments";
}
else etc... etc...
Run Code Online (Sandbox Code Playgroud)
任何帮助,将不胜感激!