以下代码行之间有什么区别?
//Function declaration
function foo() { return 5; }
//Anonymous function expression
var foo = function() { return 5; }
//Named function expression
var foo = function foo() { return 5; }
Run Code Online (Sandbox Code Playgroud)
对类似问题(var functionName = function(){} vs function functionName(){})的响应是不是完全正确?
C++中的模板机制只是偶然地对模板元编程有用.另一方面,D's专门设计用于促进这一点.而且显然它更容易理解(或者我听说过).
我没有D的经验,但是我很好奇,你能用D做什么,而你在模板元编程方面不能用C++做什么?
当我参加C++标准委员会会议时,他们正在讨论删除继承构造函数的优缺点,因为还没有编译器供应商实现它(用户没有要求它的意义).
让我快速提醒大家继承构造函数是什么:
struct B
{
B(int);
};
struct D : B
{
using B::B;
};
Run Code Online (Sandbox Code Playgroud)
一些供应商提出使用r值引用和可变参数模板(完美转发构造函数),在继承类中提供可以避免继承构造函数的转发构造函数是微不足道的.
例如:
struct D : B
{
template<class ... Args>
D(Args&& ... args) : B(args...) { }
};
Run Code Online (Sandbox Code Playgroud)
我有两个问题:
1)您能否从编程经验中提供真实世界(非人为的)示例,这些示例将从继承构造函数中获益匪浅?
2)您是否有任何技术原因可以将"完美的转发建设者"排除在适当的替代方案之外?
谢谢!
在C++ 0x中,简化了SFINAE规则,使得在演绎的"直接上下文"中出现的任何无效表达式或类型不会导致编译器错误,而是导致演绎失败(SFINAE).
我的问题是:
如果我采用重载函数的地址并且无法解决,那么在演绎的直接上下文中是否会失败?
(如果它无法解决,那么它是一个硬错误还是SFINAE)?
以下是一些示例代码:
struct X
{
// template<class T> T* foo(T,T); // lets not over-complicate things for now
void foo(char);
void foo(int);
};
template<class U> struct S
{
template<int> struct size_map
{ typedef int type; };
// here is where we take the address of a possibly overloaded function
template<class T> void f(T,
typename size_map<sizeof(&U::foo)>::type* = 0);
void f(...);
};
int main()
{
S<X> s;
// should this cause a compiler error because 'auto T = &X::foo' …Run Code Online (Sandbox Code Playgroud) 有谁知道以下隐含的'ts'捕获是否格式正确:
template<class ... Ts> void bar(Ts ... ts) { }
template<class ... Ts> int foo(Ts ... ts) {
auto L = [=] () {
bar(ts...);
};
L();
return 0;
}
int g = foo(1, 2, 3);
Run Code Online (Sandbox Code Playgroud)
标准是否清楚地说明了这个不应该很好的形成?
我是否可以使用访问2007 VBA引用而不受惩罚(具体而言,就基本语言和旧的com接口而言)为Access 2003开发基于VBA的解决方案?
或者是否有一些新的/修改过的语法添加到我需要注意的语言中?
2007年办公室的对象模型是否得到了大幅提升?
还有其他警告吗?
谢谢.
谁知道这个明确的专业化是否有效:
template <class>
struct L {
template <typename T>
struct O {
template <typename U>
static void Fun(U);
};
};
template<>
template<typename T>
template<typename U>
void L<int>::O<T>::Fun(U) {}
Run Code Online (Sandbox Code Playgroud)
lang主干(2013年12月3日)出现以下错误:
f:... \ test.cpp:36:20:错误:类'O'中'Fun'的脱机定义(未定义)
void L<int>::O<T>::Fun(U) {}
~~~~~~~~~~~~~~^
Run Code Online (Sandbox Code Playgroud)
产生1个错误。
该标准的任何支持参考,以证明您的回答是正确的!
注意:我有些奇怪,这是一个错误-我希望对任何以“ Fun”开头的模板参数系列都选择专门化的格式 <int><?any><?any>.
这是Clang错误还是我期望中的错误?
谢谢!
======编辑(我想我有一个答案)========
好的-我想我找到了支持的措辞-来自N3797(芝加哥2013年后工作草案)-14.7.3 / 16 =>
“在对类模板的成员或出现在名称空间范围中的成员模板的显式专门化声明中,成员模板及其某些封闭的类模板可能保持非专门化,除非声明在以下情况下不得显式专门化类成员模板:它的封闭类模板也没有明确地专门化。”
如果我正确地解释了这一点,那么如果要声明其成员的显式专业化,我们需要O的显式专业化?因此,错误。
正确?
谢谢!
c++ templates specialization template-specialization language-lawyer
任何人都可以向我确认在C++ 11中允许使用以下代码(包括函数参数包的嵌套扩展)(我当然感谢任何对该标准的引用):
template<class ... VFTs> int variadic_fun(VFTs ... vfts) {
return sizeof ...(vfts);
}
template<int ... Ns> struct IntPack {
template<class ... MemTs> static int variadic_memfun(MemTs ... MemArgs) {
return variadic_fun(([=]() {
cout << "MemArgs = " << MemArgs << "\n";
cout << "Ns = " << Ns;
// Note the nested expansion of MemArgs here:
cout << "variadic_fun(MemArgs...) = " << variadic_fun(MemArgs ...) << "\n";
cout << "MemArgs[Ns] = " << MemArgs[Ns] << "\n";
return 0;
})()...);
}
}; …Run Code Online (Sandbox Code Playgroud) 我正在阅读G.Peck的"Crystal Reports X - 完整参考"中的一个项目,我想知道如何在Crystal Reports公式中操作数组.我在书中找不到答案.
例如 - 我如何做以下任何/所有:
- )创建一个具有固定数字(比如说10个)元素的
数组 - )创建一个动态数组(其大小根据需要扩展)
- )获取动态数组的大小
- )从中间,开头和中添加和删除元素数组的结尾
- )清空一个数组
学习Crystal Formula语言语法最全面的资源/书籍是什么?
感谢您提供任何帮助.
c++ ×6
c++11 ×4
lambda ×2
templates ×2
constructor ×1
d ×1
inheritance ×1
javascript ×1
ms-access ×1
ms-office ×1
sfinae ×1
vba ×1